summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2010-05-23 18:14:24 +0000
committerAnders Carlsson <andersca@mac.com>2010-05-23 18:14:24 +0000
commit5773205a8d99859d91d23ab299fc4ece7ab0c354 (patch)
tree13c2a052a4a5b3e6780300ce44697fc5d0675c70 /clang/lib
parent3ff1a06de64ec5c0b343b93d51e49dbdf1bbbdf2 (diff)
downloadbcm5719-llvm-5773205a8d99859d91d23ab299fc4ece7ab0c354.tar.gz
bcm5719-llvm-5773205a8d99859d91d23ab299fc4ece7ab0c354.zip
When recording empty subobjects we should always look at the primary virtual base.
llvm-svn: 104464
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/RecordLayoutBuilder.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp
index 30db4577284..6b635aef4e7 100644
--- a/clang/lib/AST/RecordLayoutBuilder.cpp
+++ b/clang/lib/AST/RecordLayoutBuilder.cpp
@@ -530,8 +530,15 @@ void ASTRecordLayoutBuilder::UpdateEmptyClassOffsets(const CXXRecordDecl *RD,
UpdateEmptyClassOffsets(FD, Offset + FieldOffset);
}
+ const CXXRecordDecl *PrimaryBase = Layout.getPrimaryBase();
+
if (UpdateVBases) {
// FIXME: Update virtual bases.
+ } else if (PrimaryBase && Layout.getPrimaryBaseWasVirtual()) {
+ // We always want to update the offsets of a primary virtual base.
+ assert(Layout.getVBaseClassOffset(PrimaryBase) == 0 &&
+ "primary base class offset must always be 0!");
+ UpdateEmptyClassOffsets(PrimaryBase, Offset, /*UpdateVBases=*/false);
}
}
OpenPOWER on IntegriCloud