summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2015-12-29 12:46:15 -0500
committerRich Felker <dalias@aerifal.cx>2015-12-29 12:46:15 -0500
commit71991a803c8a8fe10a6ed49bc4f0a1f4890d6c46 (patch)
tree0844f3ae9a705706b41aed807dac6d0b64413a46
parentc673158d91ad995ed59dd910777cd6464f61fe8e (diff)
downloadmusl-71991a803c8a8fe10a6ed49bc4f0a1f4890d6c46.tar.gz
adjust i386 max_align_t definition to work around some broken compilers
at least gcc 4.7 claims c++11 support but does not accept the alignas keyword, causing breakage when stddef.h is included in c++11 mode. instead, prefer using __attribute__((__aligned__)) on any compiler with GNU extensions, and only use the alignas keyword as a fallback for other C++ compilers. C code should not be affected by this patch.
-rw-r--r--arch/i386/bits/alltypes.h.in8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/i386/bits/alltypes.h.in b/arch/i386/bits/alltypes.h.in
index b8902db7..1a8432d3 100644
--- a/arch/i386/bits/alltypes.h.in
+++ b/arch/i386/bits/alltypes.h.in
@@ -26,10 +26,12 @@ TYPEDEF long double float_t;
TYPEDEF long double double_t;
#endif
-#ifdef __cplusplus
-TYPEDEF struct { alignas(8) long long __ll; long double __ld; } max_align_t;
-#else
+#if !defined(__cplusplus)
TYPEDEF struct { _Alignas(8) long long __ll; long double __ld; } max_align_t;
+#elif defined(__GNUC__)
+TYPEDEF struct { __attribute__((__aligned__(8))) long long __ll; long double __ld; } max_align_t;
+#else
+TYPEDEF struct { alignas(8) long long __ll; long double __ld; } max_align_t;
#endif
TYPEDEF long time_t;