From c38b40a709696c09a8d3fc7d0415aca465d4ce13 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Thu, 3 Dec 2009 02:03:29 +0000 Subject: [PATCH] Store a GlobalDecl in the return adjustment. llvm-svn: 90387 --- clang/lib/CodeGen/CGVtable.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/clang/lib/CodeGen/CGVtable.cpp b/clang/lib/CodeGen/CGVtable.cpp index 58d9a552a231..be9c85ad449f 100644 --- a/clang/lib/CodeGen/CGVtable.cpp +++ b/clang/lib/CodeGen/CGVtable.cpp @@ -81,7 +81,8 @@ private: CovariantThunk() : Index(0) { } - CovariantThunk(uint64_t Index, const ThunkAdjustment &ReturnAdjustment, + CovariantThunk(uint64_t Index, GlobalDecl GD, + const ThunkAdjustment &ReturnAdjustment, CanQualType ReturnType) : Index(Index), ReturnAdjustment(ReturnAdjustment), ReturnType(ReturnType) { } @@ -89,6 +90,8 @@ private: // Index - The index in the vtable. uint64_t Index; + GlobalDecl GD; + /// ReturnAdjustment - The covariant thunk return adjustment. ThunkAdjustment ReturnAdjustment; @@ -290,7 +293,7 @@ public: CGM.BuildCovariantThunk(MD, Extern, Adjustment); } CovariantThunks.clear(); - + for (ThunksMapTy::const_iterator i = Thunks.begin(), e = Thunks.end(); i != e; ++i) { GlobalDecl GD = i->first; @@ -762,7 +765,7 @@ bool VtableBuilder::OverrideMethod(GlobalDecl GD, llvm::Constant *m, // FIXME: Do we always have to build a covariant thunk to save oret, // which is the containing virtual base class? if (!ReturnAdjustment.isEmpty()) - CovariantThunks[GD] = CovariantThunk(i, ReturnAdjustment, oret); + CovariantThunks[GD] = CovariantThunk(i, GD, ReturnAdjustment, oret); if (!isPure && !ThisAdjustment.isEmpty()) Thunks[GD] = Thunk(i, ThisAdjustment); @@ -777,7 +780,7 @@ bool VtableBuilder::OverrideMethod(GlobalDecl GD, llvm::Constant *m, if (!ReturnAdjustment.isEmpty()) CovariantThunks[GD] = - CovariantThunk(i, ReturnAdjustment, oret); + CovariantThunk(i, GD, ReturnAdjustment, oret); if (!isPure) Thunks[GD] = Thunk(i, ThisAdjustment);