]> granicus.if.org Git - clang/commitdiff
Headers: Provide an ABI compatible max_align_t when _MSC_VER is defined
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 4 Mar 2014 23:43:48 +0000 (23:43 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 4 Mar 2014 23:43:48 +0000 (23:43 +0000)
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/trunk@202911 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Headers/stddef.h
test/Headers/c11.c

index b6926942ef628066d0ce800ff22d3f3828d899dd..97126ed15276f3d54a3e80a9feea930d6e8e6d45 100644 (file)
@@ -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
 
index e335d0cebcb556fb045ed71aab5e7e4b48048260..2debcae3949c59f0c5a550fddb1b409c2d847c35 100644 (file)
@@ -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__