diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp
index 7e25922..898c780 100644
--- a/lib/CodeGen/CGCall.cpp
+++ b/lib/CodeGen/CGCall.cpp
@@ -97,11 +97,11 @@
   ArgTypes.insert(ArgTypes.end(), ArgTys.begin(), ArgTys.end());
 }
 
-ArgTypeIterator CGFunctionInfo::argtypes_begin() const {
-  return ArgTypes.begin();
+CGFunctionInfo::arg_iterator CGFunctionInfo::arg_begin() const {
+  return ArgTypes.begin()+1;
 }
 
-ArgTypeIterator CGFunctionInfo::argtypes_end() const {
+CGFunctionInfo::arg_iterator CGFunctionInfo::arg_end() const {
   return ArgTypes.end();
 }
 
@@ -965,8 +965,7 @@
 
   const llvm::Type *ResultType = 0;
 
-  ArgTypeIterator begin = FI.argtypes_begin(), end = FI.argtypes_end();  
-  QualType RetTy = *begin;
+  QualType RetTy = FI.getReturnType();
   ABIArgInfo RetAI = getABIReturnInfo(RetTy, *this);
   switch (RetAI.getKind()) {
   case ABIArgInfo::ByVal:
@@ -997,9 +996,10 @@
     break;
   }
   
-  for (++begin; begin != end; ++begin) {
-    ABIArgInfo AI = getABIArgumentInfo(*begin, *this);
-    const llvm::Type *Ty = ConvertType(*begin);
+  for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); 
+       it != ie; ++it) {
+    ABIArgInfo AI = getABIArgumentInfo(*it, *this);
+    const llvm::Type *Ty = ConvertType(*it);
     
     switch (AI.getKind()) {
     case ABIArgInfo::Ignore:
@@ -1020,7 +1020,7 @@
       break;
      
     case ABIArgInfo::Expand:
-      GetExpandedTypes(*begin, ArgTys);
+      GetExpandedTypes(*it, ArgTys);
       break;
     }
   }
@@ -1028,7 +1028,7 @@
   return llvm::FunctionType::get(ResultType, ArgTys, IsVariadic);
 }
 
-void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &Info,
+void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
                                            const Decl *TargetDecl,
                                            AttributeListType &PAL) {
   unsigned FuncAttrs = 0;
@@ -1045,8 +1045,7 @@
       FuncAttrs |= llvm::Attribute::ReadNone;
   }
 
-  ArgTypeIterator begin = Info.argtypes_begin(), end = Info.argtypes_end();
-  QualType RetTy = *begin;
+  QualType RetTy = FI.getReturnType();
   unsigned Index = 1;
   ABIArgInfo RetAI = getABIReturnInfo(RetTy, getTypes());
   switch (RetAI.getKind()) {
@@ -1078,8 +1077,9 @@
 
   if (RetAttrs)
     PAL.push_back(llvm::AttributeWithIndex::get(0, RetAttrs));
-  for (++begin; begin != end; ++begin) {
-    QualType ParamType = *begin;
+  for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); 
+       it != ie; ++it) {
+    QualType ParamType = *it;
     unsigned Attributes = 0;
     ABIArgInfo AI = getABIArgumentInfo(ParamType, getTypes());
     
diff --git a/lib/CodeGen/CGCall.h b/lib/CodeGen/CGCall.h
index f8fb32b..aaab36c 100644
--- a/lib/CodeGen/CGCall.h
+++ b/lib/CodeGen/CGCall.h
@@ -47,21 +47,19 @@
   typedef llvm::SmallVector<std::pair<const VarDecl*, QualType>, 
                             16> FunctionArgList;
   
-  // FIXME: This should be a better iterator type so that we can avoid
-  // construction of the ArgTypes smallvectors.
-  typedef llvm::SmallVector<QualType, 16>::const_iterator ArgTypeIterator;
-
   /// CGFunctionInfo - Class to encapsulate the information about a
   /// function definition.
   class CGFunctionInfo {
     llvm::SmallVector<QualType, 16> ArgTypes;
 
   public:
+    typedef llvm::SmallVector<QualType, 16>::const_iterator arg_iterator;
+
     CGFunctionInfo(QualType ResTy, 
                    const llvm::SmallVector<QualType, 16> &ArgTys);
 
-    ArgTypeIterator argtypes_begin() const;
-    ArgTypeIterator argtypes_end() const;
+    arg_iterator arg_begin() const;
+    arg_iterator arg_end() const;
 
     QualType getReturnType() const { return ArgTypes[0]; }
   };
