aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2010-03-10 22:26:24 +0000
committerAnders Carlsson <andersca@mac.com>2010-03-10 22:26:24 +0000
commite3bdbee47059839d5e24acab5ee7b925285f573e (patch)
tree24485a5ab0baf78bc2d09c45b53b43c0b032f0e0
parente239b9d5da3bdc722d29c276b261c136ca9f4eaa (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.cpp38
-rw-r--r--lib/AST/RecordLayoutBuilder.h1
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.