diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 264ef7b..67e39b6 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -254,14 +254,11 @@
 InitListExpr::InitListExpr(SourceLocation lbraceloc, 
                            Expr **initexprs, unsigned numinits,
                            SourceLocation rbraceloc)
-  : Expr(InitListExprClass, QualType())
-  , NumInits(numinits)
-  , LBraceLoc(lbraceloc)
-  , RBraceLoc(rbraceloc)
+  : Expr(InitListExprClass, QualType()),
+    LBraceLoc(lbraceloc), RBraceLoc(rbraceloc)
 {
-  InitExprs = new Expr*[numinits];
   for (unsigned i = 0; i != numinits; i++)
-    InitExprs[i] = initexprs[i];
+    InitExprs.push_back(initexprs[i]);
 }
 
 //===----------------------------------------------------------------------===//
@@ -1368,7 +1365,7 @@
   return reinterpret_cast<Stmt**>(&InitExprs[0]);
 }
 Stmt::child_iterator InitListExpr::child_end() {
-  return reinterpret_cast<Stmt**>(&InitExprs[NumInits]);
+  return reinterpret_cast<Stmt**>(&InitExprs[getNumInits()]);
 }
 
 // ObjCStringLiteral
diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp
index 7058c0c..3bec743 100644
--- a/lib/AST/StmtSerialization.cpp
+++ b/lib/AST/StmtSerialization.cpp
@@ -647,18 +647,20 @@
 void InitListExpr::EmitImpl(Serializer& S) const {
   S.Emit(LBraceLoc);
   S.Emit(RBraceLoc);
-  S.EmitInt(NumInits);
-  S.BatchEmitOwnedPtrs(NumInits,InitExprs);
+  S.EmitInt(InitExprs.size());
+  if (!InitExprs.empty()) S.BatchEmitOwnedPtrs(InitExprs.size(), &InitExprs[0]);
 }
 
 InitListExpr* InitListExpr::CreateImpl(Deserializer& D, ASTContext& C) {
   InitListExpr* expr = new InitListExpr();
   expr->LBraceLoc = SourceLocation::ReadVal(D);
   expr->RBraceLoc = SourceLocation::ReadVal(D);
-  expr->NumInits = D.ReadInt();
-  assert(expr->NumInits);
-  expr->InitExprs = new Expr*[expr->NumInits];
-  D.BatchReadOwnedPtrs(expr->NumInits, expr->InitExprs, C);
+  unsigned size = D.ReadInt();
+  assert(size);
+  expr->InitExprs.reserve(size);
+  for (unsigned i = 0 ; i < size; ++i) expr->InitExprs.push_back(0);
+
+  D.BatchReadOwnedPtrs(size, &expr->InitExprs[0], C);
   return expr;
 }
 
