diff options
Diffstat (limited to 'tests/test-calloc-gnu.c')
-rw-r--r-- | tests/test-calloc-gnu.c | 34 |
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); } |