aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGCXX.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-04-08 20:31:57 +0000
committerAnders Carlsson <andersca@mac.com>2009-04-08 20:31:57 +0000
commite9918d2443ad524e0f488e8f15d9bce4e7373cd1 (patch)
treef147f0a9893f84a24edd4f602f04be66ae271f87 /lib/CodeGen/CGCXX.cpp
parent4af44129dd99a233087b5cdd60bbf2fd0b9553d4 (diff)
We weren't generating correct code for calls to variadic member functions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68635 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGCXX.cpp')
-rw-r--r--lib/CodeGen/CGCXX.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp
index 000a0a9123..217f63a9df 100644
--- a/lib/CodeGen/CGCXX.cpp
+++ b/lib/CodeGen/CGCXX.cpp
@@ -142,12 +142,10 @@ RValue CodeGenFunction::EmitCXXMemberCallExpr(const CXXMemberCallExpr *CE) {
assert(MD->isInstance() &&
"Trying to emit a member call expr on a static method!");
- const CGFunctionInfo &FnInfo = CGM.getTypes().getFunctionInfo(MD);
-
- bool IsVariadic = MD->getType()->getAsFunctionProtoType()->isVariadic();
+ const FunctionProtoType *FPT = MD->getType()->getAsFunctionProtoType();
const llvm::Type *Ty =
- CGM.getTypes().GetFunctionType(FnInfo, IsVariadic);
-
+ CGM.getTypes().GetFunctionType(CGM.getTypes().getFunctionInfo(MD),
+ FPT->isVariadic());
llvm::Constant *Callee = CGM.GetAddrOfFunction(MD, Ty);
llvm::Value *BaseValue = 0;
@@ -173,5 +171,6 @@ RValue CodeGenFunction::EmitCXXMemberCallExpr(const CXXMemberCallExpr *CE) {
Args.push_back(std::make_pair(EmitAnyExprToTemp(*I), I->getType()));
QualType ResultType = MD->getType()->getAsFunctionType()->getResultType();
- return EmitCall(FnInfo, Callee, Args, MD);
+ return EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args),
+ Callee, Args, MD);
}