forked from OSchip/llvm-project
[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
This commit is contained in:
parent
86188d8a40
commit
fe76b36ab1
|
@ -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
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only -fdump-record-layouts %s \
|
||||
// RUN: | FileCheck %s
|
||||
|
||||
struct S {
|
||||
char x;
|
||||
int y;
|
||||
} __attribute__((packed, aligned(8)));
|
||||
|
||||
struct alignas(8) T {
|
||||
char x;
|
||||
int y;
|
||||
} __attribute__((packed));
|
||||
|
||||
S s;
|
||||
T t;
|
||||
// CHECK: 0 | struct T
|
||||
// CHECK-NEXT: 0 | char x
|
||||
// CHECK-NEXT: 1 | int y
|
||||
// CHECK-NEXT: | [sizeof=8, dsize=8, align=8,
|
||||
// CHECK-NEXT: | nvsize=8, nvalign=8]
|
||||
|
||||
// CHECK: 0 | struct S
|
||||
// CHECK-NEXT: 0 | char x
|
||||
// CHECK-NEXT: 1 | int y
|
||||
// CHECK-NEXT: | [sizeof=8, dsize=8, align=8,
|
||||
// CHECK-NETX: | nvsize=8, nvalign=8]
|
Loading…
Reference in New Issue