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 | 04e51cca94f622e4f266de318d8e2c6e1572e3c5 (patch) | |
| tree | d22f6d32e63ed8688e5eee43fcd792d2221f782e /clang/lib/CodeGen | |
| parent | 12ac8f0352630502d56840bb9cb53ae7f9254eb8 (diff) | |
| download | bcm5719-llvm-04e51cca94f622e4f266de318d8e2c6e1572e3c5.tar.gz bcm5719-llvm-04e51cca94f622e4f266de318d8e2c6e1572e3c5.zip | |
More cleanup.
llvm-svn: 105301
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/CGVTables.cpp | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp index d54f374b7a9..81e80cc26e5 100644 --- a/clang/lib/CodeGen/CGVTables.cpp +++ b/clang/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!"); |

