diff options
author | Nate Begeman <natebegeman@mac.com> | 2008-03-09 03:09:36 +0000 |
---|---|---|
committer | Nate Begeman <natebegeman@mac.com> | 2008-03-09 03:09:36 +0000 |
commit | ec9426ca6039279bcc99bc2c625bb2abe4f0353d (patch) | |
tree | 48b4b1ac61384b506783a826a3d43a7f3b4abf6f /CodeGen/CGExpr.cpp | |
parent | fde2bf9befede63e3f01f84519784c17b4c81480 (diff) |
Propagate calling convention information to function declarations and CallInst
instructions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48077 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CodeGen/CGExpr.cpp')
-rw-r--r-- | CodeGen/CGExpr.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/CodeGen/CGExpr.cpp b/CodeGen/CGExpr.cpp index 879f29ab60..932a5c5da8 100644 --- a/CodeGen/CGExpr.cpp +++ b/CodeGen/CGExpr.cpp @@ -595,9 +595,11 @@ RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType, } } - llvm::Value *V = Builder.CreateCall(Callee, &Args[0], &Args[0]+Args.size()); - if (V->getType() != llvm::Type::VoidTy) - V->setName("call"); + llvm::CallInst *CI = Builder.CreateCall(Callee,&Args[0],&Args[0]+Args.size()); + if (const llvm::Function *F = dyn_cast<llvm::Function>(Callee)) + CI->setCallingConv(F->getCallingConv()); + if (CI->getType() != llvm::Type::VoidTy) + CI->setName("call"); else if (ResultType->isComplexType()) return RValue::getComplex(LoadComplexFromAddr(Args[0], false)); else if (hasAggregateLLVMType(ResultType)) @@ -606,8 +608,8 @@ RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType, else { // void return. assert(ResultType->isVoidType() && "Should only have a void expr here"); - V = 0; + CI = 0; } - return RValue::get(V); + return RValue::get(CI); } |