On MidnightBSD 2.0/x86, test-stddef fails to compile when CC=cc is used (but not with CC=gcc7):
../../gltests/test-stddef.c:63:1: error: static_assert failed due to requirement '__alignof(double) <= __alignof(__max_align_t)' "verify (__alignof__ (double) <= __alignof__ (max_align_t))" verify (__alignof__ (double) <= __alignof__ (max_align_t)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The reason is that max_align_t is defined with alignment 4. This program ============================================================================================ #include <stddef.h> #include <sys/types.h> #include <stdio.h> int main () { printf ("%d %d %d\n", _Alignof (double), _Alignof (long long), _Alignof (max_align_t)); printf ("%d %d %d\n", __alignof (double), __alignof (long long), __alignof (max_align_t)); printf ("%d %d %d\n", __alignof__ (double), __alignof__ (long long), __alignof__ (max_align_t)); } ============================================================================================ prints 4 4 4 8 8 4 8 8 4 (both when compiled as a C program and as a C++ program). The configure test detects this and sets HAVE_MAX_ALIGN_T=0. So, the hack that motivated the test of _GCC_MAX_ALIGN_T (see <https://lists.gnu.org/archive/html/bug-gnulib/2016-04/msg00003.html>) is not needed with clang. This patch fixes the issue. 2021-02-08 Bruno Haible <br...@clisp.org> stddef: Fix test-stddef compilation error on MidnightBSD/x86. * lib/stddef.in.h (_GL_STDDEF_ALIGNAS, rpl_max_align_t, max_align_t): Don't ignore HAVE_MAX_ALIGN_T if the compiler is clang. diff --git a/lib/stddef.in.h b/lib/stddef.in.h index 5d3e087..6385892 100644 --- a/lib/stddef.in.h +++ b/lib/stddef.in.h @@ -109,7 +109,7 @@ typedef long max_align_t; && defined __cplusplus # include <cstddef> #else -# if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) +# if ! (@HAVE_MAX_ALIGN_T@ || (defined _GCC_MAX_ALIGN_T && !defined __clang__)) # if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,