aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGVTables.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2010-06-01 23:52:26 +0000
committerAnders Carlsson <andersca@mac.com>2010-06-01 23:52:26 +0000
commit0a02860928ea022a17e1504417e34d2a741d0226 (patch)
tree9a2658b51bc695b58644814d3e70d898444480f6 /lib/CodeGen/CGVTables.cpp
parent7097e75a59b1cab605547b894ef39be7cc4bceb3 (diff)
More cleanup.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105301 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGVTables.cpp')
-rw-r--r--lib/CodeGen/CGVTables.cpp24
1 files changed, 10 insertions, 14 deletions
diff --git a/lib/CodeGen/CGVTables.cpp b/lib/CodeGen/CGVTables.cpp
index d54f374b7a..81e80cc26e 100644
--- a/lib/CodeGen/CGVTables.cpp
+++ b/lib/CodeGen/CGVTables.cpp
@@ -87,12 +87,11 @@ private:
/// MostDerivedClassLayout - the AST record layout of the most derived class.
const ASTRecordLayout &MostDerivedClassLayout;
- /// BaseSubobjectMethodPairTy - Uniquely identifies a member function
+ /// MethodBaseOffsetPairTy - Uniquely identifies a member function
/// in a base subobject.
- typedef std::pair<BaseSubobject, const CXXMethodDecl *>
- BaseSubobjectMethodPairTy;
-
- typedef llvm::DenseMap<BaseSubobjectMethodPairTy,
+ typedef std::pair<const CXXMethodDecl *, uint64_t> MethodBaseOffsetPairTy;
+
+ typedef llvm::DenseMap<MethodBaseOffsetPairTy,
OverriderInfo> OverridersMapTy;
/// OverridersMap - The final overriders for all virtual member functions of
@@ -160,11 +159,10 @@ public:
/// the subobject with the given base offset.
OverriderInfo getOverrider(const CXXMethodDecl *MD,
uint64_t BaseOffset) const {
- BaseSubobject Base(MD->getParent(), BaseOffset);
- assert(OverridersMap.count(std::make_pair(Base, MD)) &&
+ assert(OverridersMap.count(std::make_pair(MD, BaseOffset)) &&
"Did not find overrider!");
- return OverridersMap.lookup(std::make_pair(Base, MD));
+ return OverridersMap.lookup(std::make_pair(MD, BaseOffset));
}
/// dump - dump the final overriders.
@@ -231,7 +229,8 @@ void FinalOverriders::AddOverriders(BaseSubobject Base,
PropagateOverrider(MD, OffsetInLayoutClass, MD, Offsets);
// Add the overrider as the final overrider of itself.
- OverriderInfo& Overrider = OverridersMap[std::make_pair(Base, MD)];
+ OverriderInfo& Overrider =
+ OverridersMap[std::make_pair(MD, Base.getBaseOffset())];
assert(!Overrider.Method && "Overrider should not exist yet!");
Overrider.Offset = OffsetInLayoutClass;
@@ -373,11 +372,8 @@ void FinalOverriders::PropagateOverrider(const CXXMethodDecl *OldMD,
for (unsigned I = 0, E = OffsetVector.size(); I != E; ++I) {
uint64_t Offset = OffsetVector[I];
- BaseSubobject OverriddenSubobject = BaseSubobject(OverriddenRD, Offset);
- BaseSubobjectMethodPairTy SubobjectAndMethod =
- std::make_pair(OverriddenSubobject, OverriddenMD);
-
- OverriderInfo &Overrider = OverridersMap[SubobjectAndMethod];
+ MethodBaseOffsetPairTy MethodAndBaseOffset(OverriddenMD, Offset);
+ OverriderInfo &Overrider = OverridersMap[MethodAndBaseOffset];
assert(Overrider.Method && "Did not find existing overrider!");