diff options
| author | Jörg Frings-Fürst <debian@jff.email> | 2026-03-10 13:24:07 +0100 |
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff.email> | 2026-03-10 13:24:07 +0100 |
| commit | cfd1f17f1a85d95ea12bca8dae42add7dad1ad11 (patch) | |
| tree | 8016486f8ee7157213f2d09ff2491bfa9c94638a /tests/test-calloc-gnu.c | |
| parent | 14e4d584d0121031ec40e6c35869745f1747ff29 (diff) | |
| parent | 1403307d6e2fb4e7b5d97a35f40d1e95134561ab (diff) | |
Merge branch 'release/debian/1.4.2-1'HEADdebian/1.4.2-1master
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..b7eb2ac5 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-2026 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); } |
