diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index ba466db..12cafe8 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -1810,14 +1810,14 @@
   bool InitializeVarWithConstructor(VarDecl *VD, 
                                     CXXConstructorDecl *Constructor,
                                     QualType DeclInitType, 
-                                    Expr **Exprs, unsigned NumExprs);
+                                    MultiExprArg Exprs);
 
   /// BuildCXXConstructExpr - Creates a complete call to a constructor,
   /// including handling of its default argument expressions.
   OwningExprResult BuildCXXConstructExpr(SourceLocation ConstructLoc, 
                                          QualType DeclInitType,
                                          CXXConstructorDecl *Constructor,
-                                         Expr **Exprs, unsigned NumExprs);
+                                         MultiExprArg Exprs);
 
   // FIXME: Can re remove this and have the above BuildCXXConstructExpr check if
   // the constructor can be elidable?
@@ -1825,7 +1825,7 @@
                                          QualType DeclInitType,
                                          CXXConstructorDecl *Constructor,
                                          bool Elidable,
-                                         Expr **Exprs, unsigned NumExprs);
+                                         MultiExprArg Exprs);
   
   OwningExprResult BuildCXXTemporaryObjectExpr(CXXConstructorDecl *Cons, 
                                                QualType writtenTy, 
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 9809ea5..d37f448 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -3284,7 +3284,8 @@
           Var->setInvalidDecl();
         else { 
           if (!RD->hasTrivialConstructor() || !RD->hasTrivialDestructor()) {
-            if (InitializeVarWithConstructor(Var, Constructor, InitType, 0, 0))
+            if (InitializeVarWithConstructor(Var, Constructor, InitType, 
+                                             MultiExprArg(*this)))
               Var->setInvalidDecl();
           }
           
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 89acfd1..8c5384b 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -2809,8 +2809,8 @@
 
 Sema::OwningExprResult
 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
-                            CXXConstructorDecl *Constructor,
-                            Expr **Exprs, unsigned NumExprs) {
+                            CXXConstructorDecl *Constructor, 
+                            MultiExprArg ExprArgs) {
   bool Elidable = false;
   
   // [class.copy]p15:
@@ -2821,8 +2821,8 @@
   //all, even if the class copy constructor or destructor have side effects.
   
   // FIXME: Is this enough?
-  if (Constructor->isCopyConstructor(Context) && NumExprs == 1) {
-    Expr *E = Exprs[0];
+  if (Constructor->isCopyConstructor(Context) && ExprArgs.size() == 1) {
+    Expr *E = ((Expr **)ExprArgs.get())[0];
     while (CXXBindTemporaryExpr *BE = dyn_cast<CXXBindTemporaryExpr>(E))
       E = BE->getSubExpr();
     
@@ -2831,7 +2831,7 @@
   }
   
   return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor, 
-                               Elidable, Exprs, NumExprs);
+                               Elidable, move(ExprArgs));
 }
 
 /// BuildCXXConstructExpr - Creates a complete call to a constructor,
@@ -2839,7 +2839,10 @@
 Sema::OwningExprResult
 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
                             CXXConstructorDecl *Constructor, bool Elidable,
-                            Expr **Exprs, unsigned NumExprs) {
+                            MultiExprArg ExprArgs) {
+  unsigned NumExprs = ExprArgs.size();
+  Expr **Exprs = (Expr **)ExprArgs.release();
+  
   ExprOwningPtr<CXXConstructExpr> Temp(this, 
                                        CXXConstructExpr::Create(Context, 
                                                                 DeclInitType, 
@@ -2897,10 +2900,10 @@
 bool Sema::InitializeVarWithConstructor(VarDecl *VD, 
                                         CXXConstructorDecl *Constructor,
                                         QualType DeclInitType, 
-                                        Expr **Exprs, unsigned NumExprs) {
+                                        MultiExprArg Exprs) {
   OwningExprResult TempResult = 
     BuildCXXConstructExpr(VD->getLocation(), DeclInitType, Constructor, 
-                          Exprs, NumExprs);
+                          move(Exprs));
   if (TempResult.isInvalid())
     return true;
   
@@ -3003,7 +3006,7 @@
     else {
       VDecl->setCXXDirectInitializer(true);
       if (InitializeVarWithConstructor(VDecl, Constructor, DeclInitType, 
-                                       (Expr**)Exprs.release(), NumExprs))
+                                       move(Exprs)))
         RealDecl->setInvalidDecl();
       FinalizeVarWithDestructor(VDecl, DeclInitType);
     }
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index 1963f2a..12f60b9 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -942,8 +942,8 @@
         DefaultFunctionArrayConversion(From);
         OwningExprResult InitResult = 
           BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
-                                ToType.getNonReferenceType(), 
-                                CD, &From, 1);
+                                ToType.getNonReferenceType(), CD, 
+                                MultiExprArg(*this, (void**)&From, 1));
         // Take ownership of this expression.
         From = InitResult.takeAs<Expr>();
         CastKind = CastExpr::CK_ConstructorConversion ;
@@ -988,7 +988,8 @@
     
     OwningExprResult FromResult = 
       BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(), 
-                            ToType, SCS.CopyConstructor, &From, 1);
+                            ToType, SCS.CopyConstructor, 
+                            MultiExprArg(*this, (void**)&From, 1));
     
     if (FromResult.isInvalid())
       return true;
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp
index 936d996..877efc3 100644
--- a/lib/Sema/SemaInit.cpp
+++ b/lib/Sema/SemaInit.cpp
@@ -182,7 +182,8 @@
         
         OwningExprResult InitResult = 
           BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
-                                DeclType, Constructor, &Init, 1);
+                                DeclType, Constructor, 
+                                MultiExprArg(*this, (void**)&Init, 1));
         if (InitResult.isInvalid())
           return true;
         
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index a0642f9..02b402b 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -1448,12 +1448,10 @@
                                            CXXConstructorDecl *Constructor,
                                            bool IsElidable,
                                            MultiExprArg Args) {
-    unsigned NumArgs = Args.size();
-    Expr **ArgsExprs = (Expr **)Args.release();
     return getSema().BuildCXXConstructExpr(/*FIXME:ConstructLoc*/
                                            SourceLocation(),
                                            T, Constructor, IsElidable,
-                                           ArgsExprs, NumArgs);
+                                           move(Args));
   }
 
   /// \brief Build a new object-construction expression.
