diff options
| author | Anders Carlsson <andersca@mac.com> | 2010-05-23 18:14:24 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2010-05-23 18:14:24 +0000 |
| commit | 5773205a8d99859d91d23ab299fc4ece7ab0c354 (patch) | |
| tree | 13c2a052a4a5b3e6780300ce44697fc5d0675c70 /clang/lib | |
| parent | 3ff1a06de64ec5c0b343b93d51e49dbdf1bbbdf2 (diff) | |
| download | bcm5719-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.cpp | 7 |
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); } } |

