Reid, Please review post-commit. Should be no rocket science here - we only add a method to a given vftable if it belongs to the right vbase, so carrying it around wasn't necessary. --Timur
2013/10/22 Timur Iskhodzhanov <[email protected]>: > Author: timurrrr > Date: Tue Oct 22 09:50:20 2013 > New Revision: 193164 > > URL: http://llvm.org/viewvc/llvm-project?rev=193164&view=rev > Log: > Drop the unneeded VBase field from MethodInfo in the VFTableBuilder class > > Modified: > cfe/trunk/lib/AST/VTableBuilder.cpp > > Modified: cfe/trunk/lib/AST/VTableBuilder.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/VTableBuilder.cpp?rev=193164&r1=193163&r2=193164&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/VTableBuilder.cpp (original) > +++ cfe/trunk/lib/AST/VTableBuilder.cpp Tue Oct 22 09:50:20 2013 > @@ -2483,10 +2483,6 @@ private: > /// this method's base has, or zero. > const uint64_t VBTableIndex; > > - /// VBase - If nonnull, holds the last vbase which contains the vfptr > that > - /// the method definition is adjusted to. > - const CXXRecordDecl *VBase; > - > /// VFTableIndex - The index in the vftable that this method has. > const uint64_t VFTableIndex; > > @@ -2495,13 +2491,11 @@ private: > /// or used for vcalls in the most derived class. > bool Shadowed; > > - MethodInfo(uint64_t VBTableIndex, const CXXRecordDecl *VBase, > - uint64_t VFTableIndex) > - : VBTableIndex(VBTableIndex), VBase(VBase), > VFTableIndex(VFTableIndex), > + MethodInfo(uint64_t VBTableIndex, uint64_t VFTableIndex) > + : VBTableIndex(VBTableIndex), VFTableIndex(VFTableIndex), > Shadowed(false) {} > > - MethodInfo() > - : VBTableIndex(0), VBase(0), VFTableIndex(0), Shadowed(false) {} > + MethodInfo() : VBTableIndex(0), VFTableIndex(0), Shadowed(false) {} > }; > > typedef llvm::DenseMap<const CXXMethodDecl *, MethodInfo> MethodInfoMapTy; > @@ -2579,7 +2573,7 @@ private: > // and the entries shadowed by return adjusting thunks. > if (MD->getParent() != MostDerivedClass || MI.Shadowed) > continue; > - MethodVFTableLocation Loc(MI.VBTableIndex, MI.VBase, > + MethodVFTableLocation Loc(MI.VBTableIndex, WhichVFPtr.LastVBase, > WhichVFPtr.VFPtrOffset, MI.VFTableIndex); > if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) { > MethodVFTableLocations[GlobalDecl(DD, Dtor_Deleting)] = Loc; > @@ -2873,7 +2867,6 @@ void VFTableBuilder::AddMethods(BaseSubo > // No return adjustment needed - just replace the overridden method > info > // with the current info. > MethodInfo MI(OverriddenMethodInfo.VBTableIndex, > - OverriddenMethodInfo.VBase, > OverriddenMethodInfo.VFTableIndex); > MethodInfoMap.erase(OverriddenMDIterator); > > @@ -2919,7 +2912,7 @@ void VFTableBuilder::AddMethods(BaseSubo > // it requires return adjustment. Insert the method info for this method. > unsigned VBIndex = > LastVBase ? GetVBTableIndex(MostDerivedClass, LastVBase) : 0; > - MethodInfo MI(VBIndex, LastVBase, Components.size()); > + MethodInfo MI(VBIndex, Components.size()); > > assert(!MethodInfoMap.count(MD) && > "Should not have method info for this method yet!"); > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
