From 253942158cd75fc9061e384aeba589cc8bb5f0c5 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Mon, 22 Mar 2010 15:47:01 +0000 Subject: [PATCH] We want to add all thunks, not just 'this' adjustment thunks. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99177 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGVtable.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/CGVtable.cpp b/lib/CodeGen/CGVtable.cpp index d11cbb4b80..04326b6e7c 100644 --- a/lib/CodeGen/CGVtable.cpp +++ b/lib/CodeGen/CGVtable.cpp @@ -1423,12 +1423,35 @@ void VtableBuilder::ComputeThisAdjustments() { // Add an adjustment for the deleting destructor as well. Thunks[VtableIndex + 1].This = ThisAdjustment; } - - AddThunk(Overrider.Method, Thunks[VtableIndex]); } /// Clear the method info map. MethodInfoMap.clear(); + + if (isBuildingConstructorVtable()) { + // We don't need to store thunk information for construction vtables. + return; + } + + for (ThunksInfoMapTy::const_iterator I = Thunks.begin(), E = Thunks.end(); + I != E; ++I) { + const VtableComponent &Component = Components[I->first]; + const ThunkInfo &Thunk = I->second; + + switch (Component.getKind()) { + default: + llvm_unreachable("Unexpected vtable component kind!"); + case VtableComponent::CK_FunctionPointer: + AddThunk(Component.getFunctionDecl(), Thunk); + break; + case VtableComponent::CK_CompleteDtorPointer: + AddThunk(Component.getDestructorDecl(), Thunk); + break; + case VtableComponent::CK_DeletingDtorPointer: + // We've already added the thunk when we saw the complete dtor pointer. + break; + } + } } VtableBuilder::ReturnAdjustment -- 2.40.0