Pass the globaldecl into GetOrCreateLLVMFunction so that llvm

function attributes like byval get applied to the function 
definition. This fixes PR7058 and makes i386 llvm/clang bootstrap 
pass all the same tests as x86-64 bootstrap for me (the llvmc 
tests still fail in both).

llvm-svn: 103131
This commit is contained in:
Chris Lattner 2010-05-05 22:55:13 +00:00
parent 7e60a6bd71
commit 3baada6fd7
2 changed files with 31 additions and 2 deletions

View File

@ -2548,7 +2548,7 @@ llvm::Constant *CodeGenModule::GetAddrOfThunk(GlobalDecl GD,
getMangleContext().mangleThunk(MD, Thunk, Name);
const llvm::Type *Ty = getTypes().GetFunctionTypeForVTable(MD);
return GetOrCreateLLVMFunction(Name, Ty, GlobalDecl());
return GetOrCreateLLVMFunction(Name, Ty, GD);
}
static llvm::Value *PerformTypeAdjustment(CodeGenFunction &CGF,

View File

@ -3,7 +3,7 @@
// Non-trivial dtors, should both be passed indirectly.
struct S {
~S();
int s;
short s;
};
// CHECK: define void @_Z1fv(%struct.S* sret %
@ -22,3 +22,32 @@ C g() { return C(); }
// CHECK: define void @_Z1f1C(%class.C*)
void f(C) { }
// PR7058 - Missing byval on MI thunk definition.
// CHECK: define void @_ZThn4_N18BasicAliasAnalysis13getModRefInfoE8CallSite
// ...
// CHECK: %struct.CallSite* byval %CS)
struct CallSite {
unsigned Ptr;
CallSite(unsigned XX) : Ptr(XX) {}
};
struct AliasAnalysis {
virtual void xyz();
virtual void getModRefInfo(CallSite CS) = 0;
};
struct ModulePass {
virtual void xx();
};
struct BasicAliasAnalysis : public ModulePass, public AliasAnalysis {
void getModRefInfo(CallSite CS);
};
void BasicAliasAnalysis::getModRefInfo(CallSite CS) {
}