diff options
author | Anders Carlsson <andersca@mac.com> | 2009-11-26 02:32:05 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-11-26 02:32:05 +0000 |
commit | c778540f9a43d3e9c0a123c2bf202d6d656adbbe (patch) | |
tree | 8ced7136ca43b6728fc582db9da0ac7747a20831 /clang/lib/CodeGen/CGCXX.cpp | |
parent | 0f5e6f88059bec94ec8cfd0ff00bf02face5fdef (diff) | |
download | bcm5719-llvm-c778540f9a43d3e9c0a123c2bf202d6d656adbbe.tar.gz bcm5719-llvm-c778540f9a43d3e9c0a123c2bf202d6d656adbbe.zip |
Add a ThunkAdjustment struct which holds a non-virtual and a virtual adjustment offset. Start using it. General cleanup in Mangle.cpp.
llvm-svn: 89925
Diffstat (limited to 'clang/lib/CodeGen/CGCXX.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGCXX.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/clang/lib/CodeGen/CGCXX.cpp b/clang/lib/CodeGen/CGCXX.cpp index 71cdf95f48b..96741468259 100644 --- a/clang/lib/CodeGen/CGCXX.cpp +++ b/clang/lib/CodeGen/CGCXX.cpp @@ -819,11 +819,13 @@ const char *CodeGenModule::getMangledCXXDtorName(const CXXDestructorDecl *D, return UniqueMangledName(Name.begin(), Name.end()); } -llvm::Constant *CodeGenFunction::GenerateThunk(llvm::Function *Fn, - const CXXMethodDecl *MD, - bool Extern, int64_t nv, - int64_t v) { - return GenerateCovariantThunk(Fn, MD, Extern, nv, v, 0, 0); +llvm::Constant * +CodeGenFunction::GenerateThunk(llvm::Function *Fn, const CXXMethodDecl *MD, + bool Extern, + const ThunkAdjustment &ThisAdjustment) { + return GenerateCovariantThunk(Fn, MD, Extern, + ThisAdjustment.NonVirtual, + ThisAdjustment.Virtual, 0, 0); } llvm::Value *CodeGenFunction::DynamicTypeAdjust(llvm::Value *V, int64_t nv, @@ -961,10 +963,14 @@ llvm::Constant *CodeGenFunction::GenerateCovariantThunk(llvm::Function *Fn, return Fn; } -llvm::Constant *CodeGenModule::BuildThunk(const CXXMethodDecl *MD, bool Extern, - int64_t nv, int64_t v) { +llvm::Constant * +CodeGenModule::BuildThunk(const CXXMethodDecl *MD, bool Extern, + const ThunkAdjustment &ThisAdjustment) { + llvm::SmallString<256> OutName; - getMangleContext().mangleThunk(MD, nv, v, OutName); + getMangleContext().mangleThunk(MD, ThisAdjustment.NonVirtual, + ThisAdjustment.Virtual, OutName); + llvm::GlobalVariable::LinkageTypes linktype; linktype = llvm::GlobalValue::WeakAnyLinkage; if (!Extern) @@ -977,7 +983,7 @@ llvm::Constant *CodeGenModule::BuildThunk(const CXXMethodDecl *MD, bool Extern, llvm::Function *Fn = llvm::Function::Create(FTy, linktype, OutName.str(), &getModule()); - CodeGenFunction(*this).GenerateThunk(Fn, MD, Extern, nv, v); + CodeGenFunction(*this).GenerateThunk(Fn, MD, Extern, ThisAdjustment); llvm::Constant *m = llvm::ConstantExpr::getBitCast(Fn, Ptr8Ty); return m; } |