forked from OSchip/llvm-project
Fix another unnecessary-struct-padding issue.
llvm-svn: 121352
This commit is contained in:
parent
2a2e65c452
commit
d62c9be4fc
|
@ -807,8 +807,17 @@ void RecordLayoutBuilder::DeterminePrimaryBase(const CXXRecordDecl *RD) {
|
|||
Size += GetVirtualPointersSize(RD);
|
||||
DataSize = Size;
|
||||
|
||||
unsigned UnpackedBaseAlign = Context.Target.getPointerAlign(0);
|
||||
unsigned BaseAlign = (Packed) ? 8 : UnpackedBaseAlign;
|
||||
|
||||
// The maximum field alignment overrides base align.
|
||||
if (MaxFieldAlignment) {
|
||||
BaseAlign = std::min(BaseAlign, MaxFieldAlignment);
|
||||
UnpackedBaseAlign = std::min(UnpackedBaseAlign, MaxFieldAlignment);
|
||||
}
|
||||
|
||||
// Update the alignment.
|
||||
UpdateAlignment(Context.Target.getPointerAlign(0));
|
||||
UpdateAlignment(BaseAlign, UnpackedBaseAlign);
|
||||
}
|
||||
|
||||
BaseSubobjectInfo *
|
||||
|
|
|
@ -6,11 +6,29 @@ struct Base {
|
|||
int i;
|
||||
};
|
||||
|
||||
#pragma pack(1)
|
||||
#pragma pack(push, 1)
|
||||
struct Sub : public Base {
|
||||
char c;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
int check[sizeof(Sub) == 5 ? 1 : -1];
|
||||
|
||||
}
|
||||
|
||||
namespace check2 {
|
||||
|
||||
struct Base {
|
||||
virtual ~Base();
|
||||
int x;
|
||||
};
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct Sub : virtual Base {
|
||||
char c;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
int check[sizeof(Sub) == 13 ? 1 : -1];
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue