diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-12-09 02:47:58 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-12-09 02:47:58 +0000 |
| commit | d62c9be4fc3d3f2c972946b56b0712440b9c7316 (patch) | |
| tree | e5d38b76e90e3900c29ad18896414045a1c6ca0b /clang/lib | |
| parent | 2a2e65c452c9e5ec80c0fcbcaa768226ae456cb6 (diff) | |
| download | bcm5719-llvm-d62c9be4fc3d3f2c972946b56b0712440b9c7316.tar.gz bcm5719-llvm-d62c9be4fc3d3f2c972946b56b0712440b9c7316.zip | |
Fix another unnecessary-struct-padding issue.
llvm-svn: 121352
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index b1114253fc8..34d4a7e5865 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -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 * |

