From: Eli Friedman Date: Fri, 10 Feb 2012 02:02:21 +0000 (+0000) Subject: Make sure we convert struct layout pragmas to attributes for class templates the... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=572ae0a32ece4bd7ea24e3d8f9bfe3e11aa26414;p=clang Make sure we convert struct layout pragmas to attributes for class templates the same way we do for non-template classes. . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150221 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index ca34ada132..af2c6efdff 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -1023,6 +1023,11 @@ Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, NumOuterTemplateParamLists, OuterTemplateParamLists); + // Add alignment attributes if necessary; these attributes are checked when + // the ASTContext lays out the structure. + AddAlignmentAttributesForRecord(NewClass); + AddMsStructLayoutForRecord(NewClass); + ClassTemplateDecl *NewTemplate = ClassTemplateDecl::Create(Context, SemanticContext, NameLoc, DeclarationName(Name), TemplateParams, diff --git a/test/SemaTemplate/pragma-ms_struct.cpp b/test/SemaTemplate/pragma-ms_struct.cpp new file mode 100644 index 0000000000..f04dc5ccae --- /dev/null +++ b/test/SemaTemplate/pragma-ms_struct.cpp @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -triple i686-apple-osx10.7.0 %s + +#pragma ms_struct on + +// +template struct foo { + long long a; + int b; +}; +extern int arr[sizeof(foo<0>) == 16 ? 1 : -1];