diff options
author | Momchil Velikov <momchil.velikov@arm.com> | 2018-05-21 14:28:43 +0000 |
---|---|---|
committer | Momchil Velikov <momchil.velikov@arm.com> | 2018-05-21 14:28:43 +0000 |
commit | fe76b36ab1286a1248e7a302dcca4245e91714ad (patch) | |
tree | ac1579496b7f8fe815c4e2374ad63a7c1199d24c /clang/lib | |
parent | 86188d8a404093c37b7b63515aaf223d5aa4d113 (diff) | |
download | bcm5719-llvm-fe76b36ab1286a1248e7a302dcca4245e91714ad.tar.gz bcm5719-llvm-fe76b36ab1286a1248e7a302dcca4245e91714ad.zip |
[Sema] Fix incorrect packed aligned structure layout
Handle attributes before checking the record layout (e.g. underalignment check
during `alignas` processing), as layout may be cached without taking into
account attributes that may affect it.
Differential Revision: https://reviews.llvm.org/D46439
llvm-svn: 332843
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 9a1ab4a3c58..e8e3faf7578 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -15594,6 +15594,10 @@ void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, if (!Completed) Record->completeDefinition(); + // Handle attributes before checking the layout. + if (Attr) + ProcessDeclAttributeList(S, Record, Attr); + // We may have deferred checking for a deleted destructor. Check now. if (CXXRecordDecl *CXXRecord = dyn_cast<CXXRecordDecl>(Record)) { auto *Dtor = CXXRecord->getDestructor(); @@ -15724,9 +15728,6 @@ void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, CDecl->setIvarRBraceLoc(RBrac); } } - - if (Attr) - ProcessDeclAttributeList(S, Record, Attr); } /// Determine whether the given integral value is representable within |