summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2014-05-12 17:32:31 +0000
committerTom Stellard <thomas.stellard@amd.com>2014-05-12 17:32:31 +0000
commit074a8d3deaca2f135b98669c173bc3d97db670e4 (patch)
treed728ec939865ab853bc820cdde468d791357fc16
parente0c3dac5c8c5e7789438380f2ad1341055a10360 (diff)
downloadclang-074a8d3deaca2f135b98669c173bc3d97db670e4.tar.gz
clang-074a8d3deaca2f135b98669c173bc3d97db670e4.tar.bz2
clang-074a8d3deaca2f135b98669c173bc3d97db670e4.tar.xz
Merging r202911:
------------------------------------------------------------------------ r202911 | david.majnemer | 2014-03-04 18:43:48 -0500 (Tue, 04 Mar 2014) | 14 lines Headers: Provide an ABI compatible max_align_t when _MSC_VER is defined Summary: Our usual definition of max_align_t wouldn't match up with MSVC if it was used in a template argument. Reviewers: chandlerc, rsmith, rnk Reviewed By: chandlerc CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D2924 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_34@208601 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Headers/stddef.h4
-rw-r--r--test/Headers/c11.c5
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/Headers/stddef.h b/lib/Headers/stddef.h
index b6926942ef..97126ed152 100644
--- a/lib/Headers/stddef.h
+++ b/lib/Headers/stddef.h
@@ -85,12 +85,16 @@ using ::std::nullptr_t;
#endif
#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
+#ifndef _MSC_VER
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;
+#else
+typedef double max_align_t;
+#endif
#define __CLANG_MAX_ALIGN_T_DEFINED
#endif
diff --git a/test/Headers/c11.c b/test/Headers/c11.c
index e335d0cebc..2debcae394 100644
--- a/test/Headers/c11.c
+++ b/test/Headers/c11.c
@@ -1,6 +1,7 @@
// RUN: %clang_cc1 -fsyntax-only -verify -std=c11 %s
// RUN: %clang_cc1 -fsyntax-only -verify -std=c11 -fmodules %s
// RUN: %clang_cc1 -fsyntax-only -verify -std=c11 -ffreestanding %s
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c11 -triple i686-pc-win32 -fmsc-version=1700 %s
noreturn int f(); // expected-error 1+{{}}
@@ -27,6 +28,10 @@ _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), "");
+#ifdef _MSC_VER
+_Static_assert(sizeof(max_align_t) == sizeof(double), "");
+#endif
+
// 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).
#ifndef __STDC_HOSTED__