summaryrefslogtreecommitdiff
path: root/tests/test-calloc-gnu.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-calloc-gnu.c')
-rw-r--r--tests/test-calloc-gnu.c34
1 files changed, 10 insertions, 24 deletions
diff --git a/tests/test-calloc-gnu.c b/tests/test-calloc-gnu.c
index c356dfde..98a3fb8b 100644
--- a/tests/test-calloc-gnu.c
+++ b/tests/test-calloc-gnu.c
@@ -1,5 +1,5 @@
/* Test of calloc function.
- Copyright (C) 2010-2024 Free Software Foundation, Inc.
+ Copyright (C) 2010-2025 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -24,46 +24,32 @@
#include "macros.h"
-/* Return N.
- Usual compilers are not able to infer something about the return value. */
-static size_t
-identity (size_t n)
-{
- unsigned int x = rand ();
- unsigned int y = x * x * x * x;
- x++; y |= x * x * x * x;
- x++; y |= x * x * x * x;
- x++; y |= x * x * x * x;
- y = y >> 1;
- y &= -y;
- y -= 8;
- /* At this point Y is zero but GCC doesn't infer this. */
- return n + y;
-}
+/* Work around clang bug
+ <https://github.com/llvm/llvm-project/issues/114772>. */
+void *(*volatile my_calloc) (size_t, size_t) = calloc;
+#undef calloc
+#define calloc my_calloc
int
main ()
{
/* Check that calloc (0, 0) is not a NULL pointer. */
{
- void * volatile p = calloc (0, 0);
+ void *p = calloc (0, 0);
ASSERT (p != NULL);
free (p);
}
/* Check that calloc fails when requested to allocate a block of memory
- larger than PTRDIFF_MAX or SIZE_MAX bytes.
- Use 'identity' to avoid a compiler warning from GCC 7.
- 'volatile' is needed to defeat an incorrect optimization by clang 10,
- see <https://bugs.llvm.org/show_bug.cgi?id=46055>. */
+ larger than PTRDIFF_MAX or SIZE_MAX bytes. */
{
for (size_t n = 2; n != 0; n <<= 1)
{
- void *volatile p = calloc (PTRDIFF_MAX / n + 1, identity (n));
+ void *p = calloc (PTRDIFF_MAX / n + 1, n);
ASSERT (p == NULL);
ASSERT (errno == ENOMEM);
- p = calloc (SIZE_MAX / n + 1, identity (n));
+ p = calloc (SIZE_MAX / n + 1, n);
ASSERT (p == NULL);
ASSERT (errno == ENOMEM);
}