CallArgList Args;
Args.push_back(std::make_pair(RValue::get(BlockLiteral), VoidPtrTy));
+ QualType FnType = BPT->getPointeeType();
+
// And the rest of the arguments.
- for (CallExpr::const_arg_iterator i = E->arg_begin(), e = E->arg_end();
- i != e; ++i)
- Args.push_back(std::make_pair(EmitAnyExprToTemp(*i),
- i->getType()));
+ EmitCallArgs(Args, FnType->getAsFunctionProtoType(),
+ E->arg_begin(), E->arg_end());
// Load the function.
llvm::Value *Func = Builder.CreateLoad(FuncPtr, false, "tmp");
- QualType FnType = BPT->getPointeeType();
QualType ResultType = FnType->getAsFunctionType()->getResultType();
const CGFunctionInfo &FnInfo =
Args.push_back(std::make_pair(RValue::get(BaseValue),
MD->getThisType(getContext())));
- for (CallExpr::const_arg_iterator I = CE->arg_begin(), E = CE->arg_end();
- I != E; ++I)
- Args.push_back(std::make_pair(EmitAnyExprToTemp(*I), I->getType()));
+ EmitCallArgs(Args, FPT, CE->arg_begin(), CE->arg_end());
QualType ResultType = MD->getType()->getAsFunctionType()->getResultType();
return EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args),
QualType ResultType = FnType->getAsFunctionType()->getResultType();
CallArgList Args;
- for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I)
- Args.push_back(std::make_pair(EmitAnyExprToTemp(*I),
- I->getType()));
+ EmitCallArgs(Args, FnType->getAsFunctionProtoType(), ArgBeg, ArgEnd);
return EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args),
Callee, Args, TargetDecl);
Receiver = EmitScalarExpr(E->getReceiver());
}
+ // FIXME: This should use EmitCallArgs.
CallArgList Args;
for (CallExpr::const_arg_iterator i = E->arg_begin(), e = E->arg_end();
i != e; ++i)