summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/RecordLayoutBuilder.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-12-09 02:47:58 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-12-09 02:47:58 +0000
commitd62c9be4fc3d3f2c972946b56b0712440b9c7316 (patch)
treee5d38b76e90e3900c29ad18896414045a1c6ca0b /clang/lib/AST/RecordLayoutBuilder.cpp
parent2a2e65c452c9e5ec80c0fcbcaa768226ae456cb6 (diff)
downloadbcm5719-llvm-d62c9be4fc3d3f2c972946b56b0712440b9c7316.tar.gz
bcm5719-llvm-d62c9be4fc3d3f2c972946b56b0712440b9c7316.zip
Fix another unnecessary-struct-padding issue.
llvm-svn: 121352
Diffstat (limited to 'clang/lib/AST/RecordLayoutBuilder.cpp')
-rw-r--r--clang/lib/AST/RecordLayoutBuilder.cpp11
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 *
OpenPOWER on IntegriCloud