diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp
index 74b6af1..a623cf1 100644
--- a/lib/CodeGen/CGBlocks.cpp
+++ b/lib/CodeGen/CGBlocks.cpp
@@ -435,16 +435,15 @@
   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 = 
diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp
index 217f63a..24b4a28 100644
--- a/lib/CodeGen/CGCXX.cpp
+++ b/lib/CodeGen/CGCXX.cpp
@@ -166,9 +166,7 @@
   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), 
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 4a7171e..e1cb1d1 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -1214,9 +1214,7 @@
   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);
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index 4db29ce..487da7a 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -79,6 +79,7 @@
     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)
