stdlib: Avoid undefined behavior in stdlib/tst-labs

The last loop could attempt to overflow beyond INT_MAX on 32-bit
architectures.

Also switch to GNU style.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
This commit is contained in:
Florian Weimer 2023-05-16 23:26:40 +02:00
parent 8812b9900e
commit 10a81dd4cf

View File

@ -25,7 +25,7 @@
static int do_test (void)
{
long i;
long int i;
TEST_COMPARE (labs (LONG_MAX), LONG_MAX);
TEST_COMPARE (labs (LONG_MIN + 1), LONG_MAX);
@ -36,13 +36,14 @@ static int do_test (void)
for (i = LONG_MIN + 1; i < LONG_MIN + INT_MAX; i += LARGE_PRIME)
TEST_COMPARE (labs (i), -i);
for (i = LONG_MAX - INT_MAX; i < LONG_MAX - LARGE_PRIME; i += LARGE_PRIME)
for (i = LONG_MAX - INT_MAX; i < LONG_MAX - LARGE_PRIME;
i += LARGE_PRIME)
TEST_COMPARE (labs (i), i);
for (i = INT_MIN + 1; i < 0; i += LARGE_PRIME)
TEST_COMPARE (labs (i), -i);
for (i = 0; i < INT_MAX; i += LARGE_PRIME)
for (i = 0; i <= INT_MAX - LARGE_PRIME; i += LARGE_PRIME)
TEST_COMPARE (labs (i), i);
return EXIT_SUCCESS;