diff options
author | Anders Carlsson <andersca@mac.com> | 2010-06-01 23:52:26 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-06-01 23:52:26 +0000 |
commit | 0a02860928ea022a17e1504417e34d2a741d0226 (patch) | |
tree | 9a2658b51bc695b58644814d3e70d898444480f6 /lib/CodeGen/CGVTables.cpp | |
parent | 7097e75a59b1cab605547b894ef39be7cc4bceb3 (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.cpp | 24 |
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!"); |