浏览代码

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.
Rich Felker 9 年之前
父节点
当前提交
71991a803c
共有 1 个文件被更改,包括 5 次插入3 次删除
  1. 5 3
      arch/i386/bits/alltypes.h.in

+ 5 - 3
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;