Store a GlobalDecl in the return adjustment.

llvm-svn: 90387
This commit is contained in:
Anders Carlsson 2009-12-03 02:03:29 +00:00
parent 2bd3c0fa34
commit c38b40a709
1 changed files with 7 additions and 4 deletions

View File

@ -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);