diff options
author | Anders Carlsson <andersca@mac.com> | 2010-03-10 22:26:24 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-03-10 22:26:24 +0000 |
commit | e3bdbee47059839d5e24acab5ee7b925285f573e (patch) | |
tree | 24485a5ab0baf78bc2d09c45b53b43c0b032f0e0 | |
parent | e239b9d5da3bdc722d29c276b261c136ca9f4eaa (diff) |
Get rid of the LayoutBaseNonVirtually; it was used to lay out a base either as a non-virtual base or a virtual base.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98198 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/RecordLayoutBuilder.cpp | 38 | ||||
-rw-r--r-- | lib/AST/RecordLayoutBuilder.h | 1 |
2 files changed, 20 insertions, 19 deletions
diff --git a/lib/AST/RecordLayoutBuilder.cpp b/lib/AST/RecordLayoutBuilder.cpp index 666b1242d5..f90bf907e9 100644 --- a/lib/AST/RecordLayoutBuilder.cpp +++ b/lib/AST/RecordLayoutBuilder.cpp @@ -181,14 +181,20 @@ ASTRecordLayoutBuilder::LayoutNonVirtualBases(const CXXRecordDecl *RD) { const CXXRecordDecl *Base = cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl()); // Skip the PrimaryBase here, as it is laid down first. - if (Base != PrimaryBase.getBase() || PrimaryBase.isVirtual()) - LayoutBaseNonVirtually(Base, false); + if (Base != PrimaryBase.getBase() || PrimaryBase.isVirtual()) { + // Lay out the base. + LayoutNonVirtualBase(Base); + } } } } void ASTRecordLayoutBuilder::LayoutNonVirtualBase(const CXXRecordDecl *RD) { - LayoutBaseNonVirtually(RD, false); + // Layout the base. + uint64_t Offset = LayoutBase(RD); + + // Add its base class offset. + Bases.push_back(std::make_pair(RD, Offset)); } void ASTRecordLayoutBuilder::LayoutVirtualBases(const CXXRecordDecl *Class, @@ -244,7 +250,11 @@ void ASTRecordLayoutBuilder::LayoutVirtualBases(const CXXRecordDecl *Class, } void ASTRecordLayoutBuilder::LayoutVirtualBase(const CXXRecordDecl *RD) { - LayoutBaseNonVirtually(RD, true); + // Layout the base. + uint64_t Offset = LayoutBase(RD); + + // Add its base class offset. + VBases.push_back(std::make_pair(RD, Offset)); } uint64_t ASTRecordLayoutBuilder::LayoutBase(const CXXRecordDecl *RD) { @@ -434,18 +444,6 @@ ASTRecordLayoutBuilder::UpdateEmptyClassOffsets(const FieldDecl *FD, } } -void ASTRecordLayoutBuilder::LayoutBaseNonVirtually(const CXXRecordDecl *RD, - bool IsVirtualBase) { - // Layout the base. - uint64_t Offset = LayoutBase(RD); - - // Add base class offsets. - if (IsVirtualBase) - VBases.push_back(std::make_pair(RD, Offset)); - else - Bases.push_back(std::make_pair(RD, Offset)); -} - void ASTRecordLayoutBuilder::Layout(const RecordDecl *D) { IsUnion = D->isUnion(); @@ -464,9 +462,13 @@ void ASTRecordLayoutBuilder::Layout(const RecordDecl *D) { LayoutVtable(RD); // PrimaryBase goes first. if (PrimaryBase.getBase()) { - if (PrimaryBase.isVirtual()) + if (PrimaryBase.isVirtual()) { IndirectPrimaryBases.insert(PrimaryBase.getBase()); - LayoutBaseNonVirtually(PrimaryBase.getBase(), PrimaryBase.isVirtual()); + + LayoutVirtualBase(PrimaryBase.getBase()); + } else { + LayoutNonVirtualBase(PrimaryBase.getBase()); + } } LayoutNonVirtualBases(RD); } diff --git a/lib/AST/RecordLayoutBuilder.h b/lib/AST/RecordLayoutBuilder.h index 9a918b1c8a..b857a8e32c 100644 --- a/lib/AST/RecordLayoutBuilder.h +++ b/lib/AST/RecordLayoutBuilder.h @@ -122,7 +122,6 @@ class ASTRecordLayoutBuilder { uint64_t LayoutBase(const CXXRecordDecl *RD); void LayoutVtable(const CXXRecordDecl *RD); - void LayoutBaseNonVirtually(const CXXRecordDecl *RD, bool IsVBase); /// canPlaceRecordAtOffset - Return whether a record (either a base class /// or a field) can be placed at the given offset. |