diff options
Diffstat (limited to 'tests/test-stddef.c')
-rw-r--r-- | tests/test-stddef.c | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/tests/test-stddef.c b/tests/test-stddef.c index 470c7a6b..5bceb18a 100644 --- a/tests/test-stddef.c +++ b/tests/test-stddef.c @@ -1,5 +1,5 @@ /* Test of <stddef.h> substitute. - Copyright (C) 2009-2022 Free Software Foundation, Inc. + Copyright (C) 2009-2024 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 @@ -19,14 +19,12 @@ #include <config.h> #include <stddef.h> -#include <limits.h> -#include <stdalign.h> /* Check that appropriate types are defined. */ wchar_t a = 'c'; ptrdiff_t b = 1; size_t c = 2; -max_align_t x; +max_align_t mat; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ @@ -45,10 +43,6 @@ struct d static_assert (sizeof (offsetof (struct d, e)) == sizeof (size_t)); static_assert (offsetof (struct d, f) == 1); -/* offsetof promotes to an unsigned integer if and only if sizes do - not fit in int. */ -static_assert ((offsetof (struct d, e) < -1) == (INT_MAX < (size_t) -1)); - /* Check max_align_t's alignment. */ static_assert (alignof (double) <= alignof (max_align_t)); static_assert (alignof (int) <= alignof (max_align_t)); @@ -69,6 +63,36 @@ static_assert (__alignof__ (wchar_t) <= __alignof__ (max_align_t)); static_assert (__alignof__ (struct d) <= __alignof__ (max_align_t)); #endif +int test_unreachable_optimization (int x); +_Noreturn void test_unreachable_noreturn (void); + +int +test_unreachable_optimization (int x) +{ + /* Check that the compiler uses 'unreachable' for optimization. + This function, when compiled with optimization, should have code + equivalent to + return x + 3; + Use 'objdump --disassemble test-stddef.o' to verify this. */ + if (x < 4) + unreachable (); + return (x > 1 ? x + 3 : 2 * x + 10); +} + +_Noreturn void +test_unreachable_noreturn (void) +{ + /* Check that the compiler's data-flow analysis recognizes 'unreachable ()'. + This function should not elicit a warning. */ + unreachable (); +} + +#include <limits.h> /* INT_MAX */ + +/* offsetof promotes to an unsigned integer if and only if sizes do + not fit in int. */ +static_assert ((offsetof (struct d, e) < -1) == (INT_MAX < (size_t) -1)); + int main (void) { |