Files
llvm/clang-max_align_t.patch

35 lines
1.4 KiB
Diff

diff -ru llvm.orig/tools/clang/lib/Headers/stddef.h llvm/tools/clang/lib/Headers/stddef.h
--- llvm.orig/tools/clang/lib/Headers/stddef.h 2014-06-21 14:04:14.578588219 +0200
+++ llvm/tools/clang/lib/Headers/stddef.h 2014-06-21 14:04:35.729587594 +0200
@@ -84,6 +84,16 @@
#endif
#endif
+#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
+typedef struct {
+ long long __clang_max_align_nonce1
+ __attribute__((__aligned__(__alignof__(long long))));
+ long double __clang_max_align_nonce2
+ __attribute__((__aligned__(__alignof__(long double))));
+} max_align_t;
+#define __CLANG_MAX_ALIGN_T_DEFINED
+#endif
+
#define offsetof(t, d) __builtin_offsetof(t, d)
#endif /* __STDDEF_H */
diff -ru llvm.orig/tools/clang/test/Headers/c11.c llvm/tools/clang/test/Headers/c11.c
--- llvm.orig/tools/clang/test/Headers/c11.c 2014-06-21 14:04:14.505588221 +0200
+++ llvm/tools/clang/test/Headers/c11.c 2014-06-21 14:07:30.305582436 +0200
@@ -22,6 +22,10 @@
#define __STDC_WANT_LIB_EXT1__ 1
#include <stddef.h>
rsize_t x = 0;
+_Static_assert(sizeof(max_align_t) >= sizeof(long long), "");
+_Static_assert(alignof(max_align_t) >= alignof(long long), "");
+_Static_assert(sizeof(max_align_t) >= sizeof(long double), "");
+_Static_assert(alignof(max_align_t) >= alignof(long double), "");
// If we are freestanding, then also check RSIZE_MAX (in a hosted implementation
// we will use the host stdint.h, which may not yet have C11 support).