diff options
author | Anders Carlsson <andersca@mac.com> | 2010-03-23 17:17:29 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-03-23 17:17:29 +0000 |
commit | 19879c98d964bc67442618510af04e3457219780 (patch) | |
tree | 9249cccef6725c0275d1ed6970299832315208bd /lib/CodeGen/CGVtable.cpp | |
parent | fbf6ed46dd6ecc8d94a5f35ddf88b59c39895b84 (diff) |
More thunks scaffolding.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99294 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGVtable.cpp')
-rw-r--r-- | lib/CodeGen/CGVtable.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/CodeGen/CGVtable.cpp b/lib/CodeGen/CGVtable.cpp index 279fcaac7d..6fee2a566c 100644 --- a/lib/CodeGen/CGVtable.cpp +++ b/lib/CodeGen/CGVtable.cpp @@ -3650,9 +3650,27 @@ CodeGenVTables::GenerateVtable(llvm::GlobalVariable::LinkageTypes Linkage, return GV; } +llvm::Constant *CodeGenModule::GetAddrOfThunk(GlobalDecl GD, + const ThunkInfo &Thunk) { + const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl()); + + // Compute the mangled name. + llvm::SmallString<256> Name; + if (const CXXDestructorDecl* DD = dyn_cast<CXXDestructorDecl>(MD)) + getMangleContext().mangleCXXDtorThunk(DD, GD.getDtorType(), Thunk.This, + Name); + else + getMangleContext().mangleThunk(MD, Thunk, Name); + + const llvm::Type *Ty = getTypes().GetFunctionTypeForVtable(MD); + return GetOrCreateLLVMFunction(Name, Ty, GlobalDecl()); +} + void CodeGenVTables::EmitThunk(GlobalDecl GD, const ThunkInfo &Thunk) { - // FIXME: Implement this! + llvm::Constant *ThunkFn = CGM.GetAddrOfThunk(GD, Thunk); + + (void)ThunkFn; } void CodeGenVTables::EmitThunks(GlobalDecl GD) |