From: Bruno Haible Date: Fri, 27 Dec 2024 22:23:10 +0000 (+0100) Subject: Rename module stddef to stddef-h. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=72b89433e6efdaf39ce3167193f5ef9a3536981a;p=gnulib.git Rename module stddef to stddef-h. * modules/stddef-h: Renamed from modules/stddef. * modules/stddef-h-tests: Renamed from modules/stddef-tests. * modules/stddef-h-c++-tests: Renamed from modules/stddef-c++-tests. * tests/test-stddef-h.c: Renamed from tests/test-stddef.c. * tests/test-stddef-h-c++.cc: Renamed from tests/test-stddef-c++.cc. * tests/test-stddef-h-c++2.cc: Renamed from tests/test-stddef-c++2.cc. * doc/posix-headers/stddef.texi: Update. * modules/* (Depends-on): Update. * modules/stddef: New file. --- diff --git a/ChangeLog b/ChangeLog index a910bc094d..e09072ad31 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2024-12-27 Bruno Haible + + Rename module stddef to stddef-h. + * modules/stddef-h: Renamed from modules/stddef. + * modules/stddef-h-tests: Renamed from modules/stddef-tests. + * modules/stddef-h-c++-tests: Renamed from modules/stddef-c++-tests. + * tests/test-stddef-h.c: Renamed from tests/test-stddef.c. + * tests/test-stddef-h-c++.cc: Renamed from tests/test-stddef-c++.cc. + * tests/test-stddef-h-c++2.cc: Renamed from tests/test-stddef-c++2.cc. + * doc/posix-headers/stddef.texi: Update. + * modules/* (Depends-on): Update. + * modules/stddef: New file. + 2024-12-27 Bruno Haible Rename module stdckdint to stdckdint-h. diff --git a/doc/posix-headers/stddef.texi b/doc/posix-headers/stddef.texi index 2df3614461..ac84f00779 100644 --- a/doc/posix-headers/stddef.texi +++ b/doc/posix-headers/stddef.texi @@ -3,8 +3,8 @@ POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/stddef.h.html} -Gnulib module: stddef -@mindex stddef +Gnulib module: stddef-h +@mindex stddef-h Portability problems fixed by Gnulib: @itemize diff --git a/modules/c-stack b/modules/c-stack index 23d1da5af8..a9d0805e26 100644 --- a/modules/c-stack +++ b/modules/c-stack @@ -19,7 +19,7 @@ inttypes-h mempcpy raise sigsegv -stddef +stddef-h unistd configure.ac: diff --git a/modules/dfa b/modules/dfa index 3fd3a10eb5..7c09f1f4b1 100644 --- a/modules/dfa +++ b/modules/dfa @@ -26,7 +26,7 @@ mbrtoc32-regular mbszero regex stdbool-h -stddef +stddef-h stdint stdio stdlib diff --git a/modules/error b/modules/error index 3f8a226933..86ff700483 100644 --- a/modules/error +++ b/modules/error @@ -7,7 +7,7 @@ m4/error.m4 Depends-on: error-h -stddef +stddef-h stdio getprogname [test $COMPILE_ERROR_C = 1] gettext-h [test $COMPILE_ERROR_C = 1] diff --git a/modules/fts b/modules/fts index 0bc757e901..e7cbf9e2f4 100644 --- a/modules/fts +++ b/modules/fts @@ -35,7 +35,7 @@ opendirat readdir realloc-posix stdbool-h -stddef +stddef-h stdint configure.ac: diff --git a/modules/glibc-internal/dynarray b/modules/glibc-internal/dynarray index 3271e69b4e..b86e06391b 100644 --- a/modules/glibc-internal/dynarray +++ b/modules/glibc-internal/dynarray @@ -18,7 +18,7 @@ gen-header libc-config stdbool-h stdckdint-h -stddef +stddef-h configure.ac: AC_PROG_MKDIR_P diff --git a/modules/glibc-internal/scratch_buffer b/modules/glibc-internal/scratch_buffer index 193a18ccf4..656a8f32af 100644 --- a/modules/glibc-internal/scratch_buffer +++ b/modules/glibc-internal/scratch_buffer @@ -14,7 +14,7 @@ builtin-expect gen-header libc-config stdbool-h -stddef +stddef-h malloc-posix realloc-posix free-posix diff --git a/modules/locale-h b/modules/locale-h index df0237723d..c81bd908d7 100644 --- a/modules/locale-h +++ b/modules/locale-h @@ -12,7 +12,7 @@ include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use -stddef +stddef-h configure.ac: gl_LOCALE_H diff --git a/modules/malloc-h b/modules/malloc-h index 7c241d2943..d308515b77 100644 --- a/modules/malloc-h +++ b/modules/malloc-h @@ -10,7 +10,7 @@ gen-header include_next snippet/c++defs snippet/warn-on-use -stddef +stddef-h stdlib configure.ac: diff --git a/modules/relocatable-prog-wrapper b/modules/relocatable-prog-wrapper index 00ebccc575..c538512c7b 100644 --- a/modules/relocatable-prog-wrapper +++ b/modules/relocatable-prog-wrapper @@ -70,7 +70,7 @@ limits-h pathmax ssize_t stdbool-h -stddef +stddef-h stdckdint-h stdint stdlib diff --git a/modules/stddef b/modules/stddef index 96eeeaf88b..890eaba277 100644 --- a/modules/stddef +++ b/modules/stddef @@ -1,46 +1,20 @@ Description: A that works around platform issues. +Status: +deprecated + +Notice: +This module is deprecated. Use the module 'stddef-h' instead. + Files: -lib/stddef.in.h -m4/stddef_h.m4 Depends-on: -gen-header -include_next -extensions +stddef-h configure.ac: -gl_STDDEF_H -gl_STDDEF_H_REQUIRE_DEFAULTS -gl_CONDITIONAL_HEADER([stddef.h]) -AC_PROG_MKDIR_P Makefile.am: -BUILT_SOURCES += $(STDDEF_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_STDDEF_H -stddef.h: stddef.in.h $(top_builddir)/config.status -@NMD@ $(AM_V_GEN)$(MKDIR_P) '%reldir%' - $(gl_V_at)$(SED_HEADER_STDOUT) \ - -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ - -e 's|@''NULLPTR_T_NEEDS_STDDEF''@|$(NULLPTR_T_NEEDS_STDDEF)|g' \ - -e 's|@''STDDEF_NOT_IDEMPOTENT''@|$(STDDEF_NOT_IDEMPOTENT)|g' \ - -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ - -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ - $(srcdir)/stddef.in.h > $@-t - $(AM_V_at)mv $@-t $@ -else -stddef.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stddef.h stddef.h-t Include: @@ -49,4 +23,3 @@ License: LGPLv2+ Maintainer: -all diff --git a/modules/stddef-c++-tests b/modules/stddef-c++-tests deleted file mode 100644 index c11a16f7fb..0000000000 --- a/modules/stddef-c++-tests +++ /dev/null @@ -1,18 +0,0 @@ -Files: -tests/test-stddef-c++.cc -tests/test-stddef-c++2.cc - -Status: -c++-test - -Depends-on: -ansi-c++-opt - -configure.ac: - -Makefile.am: -if ANSICXX -TESTS += test-stddef-c++ -check_PROGRAMS += test-stddef-c++ -test_stddef_c___SOURCES = test-stddef-c++.cc test-stddef-c++2.cc -endif diff --git a/modules/stddef-h b/modules/stddef-h new file mode 100644 index 0000000000..96eeeaf88b --- /dev/null +++ b/modules/stddef-h @@ -0,0 +1,52 @@ +Description: +A that works around platform issues. + +Files: +lib/stddef.in.h +m4/stddef_h.m4 + +Depends-on: +gen-header +include_next +extensions + +configure.ac: +gl_STDDEF_H +gl_STDDEF_H_REQUIRE_DEFAULTS +gl_CONDITIONAL_HEADER([stddef.h]) +AC_PROG_MKDIR_P + +Makefile.am: +BUILT_SOURCES += $(STDDEF_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_STDDEF_H +stddef.h: stddef.in.h $(top_builddir)/config.status +@NMD@ $(AM_V_GEN)$(MKDIR_P) '%reldir%' + $(gl_V_at)$(SED_HEADER_STDOUT) \ + -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ + -e 's|@''NULLPTR_T_NEEDS_STDDEF''@|$(NULLPTR_T_NEEDS_STDDEF)|g' \ + -e 's|@''STDDEF_NOT_IDEMPOTENT''@|$(STDDEF_NOT_IDEMPOTENT)|g' \ + -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ + -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ + $(srcdir)/stddef.in.h > $@-t + $(AM_V_at)mv $@-t $@ +else +stddef.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stddef.h stddef.h-t + +Include: + + +License: +LGPLv2+ + +Maintainer: +all diff --git a/modules/stddef-h-c++-tests b/modules/stddef-h-c++-tests new file mode 100644 index 0000000000..b46418837a --- /dev/null +++ b/modules/stddef-h-c++-tests @@ -0,0 +1,18 @@ +Files: +tests/test-stddef-h-c++.cc +tests/test-stddef-h-c++2.cc + +Status: +c++-test + +Depends-on: +ansi-c++-opt + +configure.ac: + +Makefile.am: +if ANSICXX +TESTS += test-stddef-h-c++ +check_PROGRAMS += test-stddef-h-c++ +test_stddef_h_c___SOURCES = test-stddef-h-c++.cc test-stddef-h-c++2.cc +endif diff --git a/modules/stddef-h-tests b/modules/stddef-h-tests new file mode 100644 index 0000000000..9a9ec396a8 --- /dev/null +++ b/modules/stddef-h-tests @@ -0,0 +1,13 @@ +Files: +tests/test-stddef-h.c + +Depends-on: +alignasof +assert-h +stddef-h-c++-tests + +configure.ac: + +Makefile.am: +TESTS += test-stddef-h +check_PROGRAMS += test-stddef-h diff --git a/modules/stddef-tests b/modules/stddef-tests deleted file mode 100644 index f81ca4785e..0000000000 --- a/modules/stddef-tests +++ /dev/null @@ -1,13 +0,0 @@ -Files: -tests/test-stddef.c - -Depends-on: -alignasof -assert-h -stddef-c++-tests - -configure.ac: - -Makefile.am: -TESTS += test-stddef -check_PROGRAMS += test-stddef diff --git a/modules/stdio b/modules/stdio index 0e6b6e4d21..dfae001260 100644 --- a/modules/stdio +++ b/modules/stdio @@ -16,7 +16,7 @@ snippet/arg-nonnull snippet/c++defs snippet/warn-on-use ssize_t -stddef +stddef-h sys_types configure.ac-early: diff --git a/modules/stdlib b/modules/stdlib index ddf6d5725f..e1fe525665 100644 --- a/modules/stdlib +++ b/modules/stdlib @@ -16,7 +16,7 @@ snippet/arg-nonnull snippet/c++defs snippet/warn-on-use snippet/_Noreturn -stddef +stddef-h unistd configure.ac: diff --git a/modules/string b/modules/string index eb0b215437..79d21a5634 100644 --- a/modules/string +++ b/modules/string @@ -13,7 +13,7 @@ include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use -stddef +stddef-h stdlib configure.ac: diff --git a/modules/time-h b/modules/time-h index 76921979f0..b3affe3433 100644 --- a/modules/time-h +++ b/modules/time-h @@ -12,7 +12,7 @@ include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use -stddef +stddef-h configure.ac: gl_TIME_H diff --git a/modules/unistd b/modules/unistd index f3c84660c3..b9cfa25072 100644 --- a/modules/unistd +++ b/modules/unistd @@ -16,7 +16,7 @@ snippet/arg-nonnull snippet/c++defs snippet/warn-on-use ssize_t -stddef +stddef-h sys_types configure.ac: diff --git a/modules/wchar b/modules/wchar index f4b7518751..a24e25cdf9 100644 --- a/modules/wchar +++ b/modules/wchar @@ -15,7 +15,7 @@ snippet/c++defs snippet/warn-on-use extern-inline inttypes-h-incomplete -stddef +stddef-h stdlib configure.ac: diff --git a/tests/test-stddef-c++.cc b/tests/test-stddef-c++.cc deleted file mode 100644 index e843b2c693..0000000000 --- a/tests/test-stddef-c++.cc +++ /dev/null @@ -1,28 +0,0 @@ -/* Test of substitute in C++ mode. - Copyright (C) 2019-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 - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2019. */ - -#define GNULIB_NAMESPACE gnulib -#include - -#include - - -int -main () -{ -} diff --git a/tests/test-stddef-c++2.cc b/tests/test-stddef-c++2.cc deleted file mode 100644 index 3fb1423fe4..0000000000 --- a/tests/test-stddef-c++2.cc +++ /dev/null @@ -1,20 +0,0 @@ -/* Test of substitute in C++ mode. - Copyright (C) 2019-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 - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#define GNULIB_NAMESPACE gnulib -#include - -#include diff --git a/tests/test-stddef-h-c++.cc b/tests/test-stddef-h-c++.cc new file mode 100644 index 0000000000..e843b2c693 --- /dev/null +++ b/tests/test-stddef-h-c++.cc @@ -0,0 +1,28 @@ +/* Test of substitute in C++ mode. + Copyright (C) 2019-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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2019. */ + +#define GNULIB_NAMESPACE gnulib +#include + +#include + + +int +main () +{ +} diff --git a/tests/test-stddef-h-c++2.cc b/tests/test-stddef-h-c++2.cc new file mode 100644 index 0000000000..3fb1423fe4 --- /dev/null +++ b/tests/test-stddef-h-c++2.cc @@ -0,0 +1,20 @@ +/* Test of substitute in C++ mode. + Copyright (C) 2019-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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#define GNULIB_NAMESPACE gnulib +#include + +#include diff --git a/tests/test-stddef-h.c b/tests/test-stddef-h.c new file mode 100644 index 0000000000..5bceb18a29 --- /dev/null +++ b/tests/test-stddef-h.c @@ -0,0 +1,100 @@ +/* Test of substitute. + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake , 2009. */ + +#include + +#include + +/* Check that appropriate types are defined. */ +wchar_t a = 'c'; +ptrdiff_t b = 1; +size_t c = 2; +max_align_t mat; + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +static_assert (sizeof NULL == sizeof (void *)); + +/* Check that offsetof produces integer constants with correct type. */ +struct d +{ + char e; + char f; +}; +/* Solaris 10 has a bug where offsetof is under-parenthesized, and + cannot be used as an arbitrary expression. However, since it is + unlikely to bite real code, we ignore that short-coming. */ +/* static_assert (sizeof offsetof (struct d, e) == sizeof (size_t)); */ +static_assert (sizeof (offsetof (struct d, e)) == sizeof (size_t)); +static_assert (offsetof (struct d, f) == 1); + +/* Check max_align_t's alignment. */ +static_assert (alignof (double) <= alignof (max_align_t)); +static_assert (alignof (int) <= alignof (max_align_t)); +static_assert (alignof (long double) <= alignof (max_align_t)); +static_assert (alignof (long int) <= alignof (max_align_t)); +static_assert (alignof (ptrdiff_t) <= alignof (max_align_t)); +static_assert (alignof (size_t) <= alignof (max_align_t)); +static_assert (alignof (wchar_t) <= alignof (max_align_t)); +static_assert (alignof (struct d) <= alignof (max_align_t)); +#if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ +static_assert (__alignof__ (double) <= __alignof__ (max_align_t)); +static_assert (__alignof__ (int) <= __alignof__ (max_align_t)); +static_assert (__alignof__ (long double) <= __alignof__ (max_align_t)); +static_assert (__alignof__ (long int) <= __alignof__ (max_align_t)); +static_assert (__alignof__ (ptrdiff_t) <= __alignof__ (max_align_t)); +static_assert (__alignof__ (size_t) <= __alignof__ (max_align_t)); +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 /* 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) +{ + return 0; +} diff --git a/tests/test-stddef.c b/tests/test-stddef.c deleted file mode 100644 index 5bceb18a29..0000000000 --- a/tests/test-stddef.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Test of substitute. - 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 - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Eric Blake , 2009. */ - -#include - -#include - -/* Check that appropriate types are defined. */ -wchar_t a = 'c'; -ptrdiff_t b = 1; -size_t c = 2; -max_align_t mat; - -/* Check that NULL can be passed through varargs as a pointer type, - per POSIX 2008. */ -static_assert (sizeof NULL == sizeof (void *)); - -/* Check that offsetof produces integer constants with correct type. */ -struct d -{ - char e; - char f; -}; -/* Solaris 10 has a bug where offsetof is under-parenthesized, and - cannot be used as an arbitrary expression. However, since it is - unlikely to bite real code, we ignore that short-coming. */ -/* static_assert (sizeof offsetof (struct d, e) == sizeof (size_t)); */ -static_assert (sizeof (offsetof (struct d, e)) == sizeof (size_t)); -static_assert (offsetof (struct d, f) == 1); - -/* Check max_align_t's alignment. */ -static_assert (alignof (double) <= alignof (max_align_t)); -static_assert (alignof (int) <= alignof (max_align_t)); -static_assert (alignof (long double) <= alignof (max_align_t)); -static_assert (alignof (long int) <= alignof (max_align_t)); -static_assert (alignof (ptrdiff_t) <= alignof (max_align_t)); -static_assert (alignof (size_t) <= alignof (max_align_t)); -static_assert (alignof (wchar_t) <= alignof (max_align_t)); -static_assert (alignof (struct d) <= alignof (max_align_t)); -#if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ -static_assert (__alignof__ (double) <= __alignof__ (max_align_t)); -static_assert (__alignof__ (int) <= __alignof__ (max_align_t)); -static_assert (__alignof__ (long double) <= __alignof__ (max_align_t)); -static_assert (__alignof__ (long int) <= __alignof__ (max_align_t)); -static_assert (__alignof__ (ptrdiff_t) <= __alignof__ (max_align_t)); -static_assert (__alignof__ (size_t) <= __alignof__ (max_align_t)); -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 /* 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) -{ - return 0; -}