Author: majnemer Date: Tue Mar 4 17:43:48 2014 New Revision: 202911 URL: http://llvm.org/viewvc/llvm-project?rev=202911&view=rev Log: 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 Modified: cfe/trunk/lib/Headers/stddef.h cfe/trunk/test/Headers/c11.c Modified: cfe/trunk/lib/Headers/stddef.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/stddef.h?rev=202911&r1=202910&r2=202911&view=diff ============================================================================== --- cfe/trunk/lib/Headers/stddef.h (original) +++ cfe/trunk/lib/Headers/stddef.h Tue Mar 4 17:43:48 2014 @@ -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 Modified: cfe/trunk/test/Headers/c11.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/c11.c?rev=202911&r1=202910&r2=202911&view=diff ============================================================================== --- cfe/trunk/test/Headers/c11.c (original) +++ cfe/trunk/test/Headers/c11.c Tue Mar 4 17:43:48 2014 @@ -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) >= a _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__ _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
