================
@@ -0,0 +1,68 @@
+//===-- Unittests for qsort_s 
---------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#define __STDC_WANT_LIB_EXT1__ 1
+#include "QsortReentrantTest.h"
+#include "hdr/stdint_proxy.h"
+#include "hdr/types/errno_t.h"
+#include "hdr/types/rsize_t.h"
+#include "src/stdlib/qsort_s.h"
+#include "test/UnitTest/ConstraintHandlerCheckingTest.h"
+#include "test/UnitTest/Test.h"
+
+QSORTREENTRANT_TEST(QsortS, LIBC_NAMESPACE::qsort_s, rsize_t)
+
+using LlvmLibcQsortSConstraintTest =
+    LIBC_NAMESPACE::testing::ConstraintHandlerCheckingTest;
+
+static int compare(const void *a, const void *b, void *) {
+  const int *a_int = static_cast<const int *>(a);
+  const int *b_int = static_cast<const int *>(b);
+  return *a_int - *b_int;
+}
+
+TEST_F(LlvmLibcQsortSConstraintTest, ArraySizeGreaterThanRsizeMax) {
+  int array[] = {1, 3, 2};
+  errno_t retval =
+      LIBC_NAMESPACE::qsort_s(array, RSIZE_MAX + 1, sizeof(int), compare, 0);
+  EXPECT_NE(retval, 0);
+  EXPECT_STREQ(buffer, "qsort_s: array_size cannot be greater than RSIZE_MAX");
----------------
vhscampos wrote:

Good point. Unfortunately I believe there is no specified way to differentiate 
among the different error conditions. Both the error message and the errno_t 
code are implementation-defined.

I plan to change this to a simple boolean "error detected" flag. I don't think 
we can do better than that.

https://github.com/llvm/llvm-project/pull/198797
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to