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.
This commit is contained in:
Rich Felker 2015-12-29 12:46:15 -05:00
parent c673158d91
commit 71991a803c
1 changed files with 5 additions and 3 deletions

View File

@ -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;