[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
stddef: Fix test-stddef compilation error on MidnightBSD/x86
From: |
Bruno Haible |
Subject: |
stddef: Fix test-stddef compilation error on MidnightBSD/x86 |
Date: |
Mon, 08 Feb 2021 23:26:00 +0100 |
User-agent: |
KMail/5.1.3 (Linux/4.4.0-197-generic; KDE/5.18.0; x86_64; ; ) |
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 <bruno@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,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- stddef: Fix test-stddef compilation error on MidnightBSD/x86,
Bruno Haible <=