Template instantiation for initializer lists

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72229 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateInstantiateExpr.cpp b/lib/Sema/SemaTemplateInstantiateExpr.cpp
index 8cd60ed..283b0d3 100644
--- a/lib/Sema/SemaTemplateInstantiateExpr.cpp
+++ b/lib/Sema/SemaTemplateInstantiateExpr.cpp
@@ -60,7 +60,7 @@
     OwningExprResult VisitShuffleVectorExpr(ShuffleVectorExpr *E);
     OwningExprResult VisitChooseExpr(ChooseExpr *E);
     OwningExprResult VisitVAArgExpr(VAArgExpr *E);
-    // FIXME: InitListExpr
+    OwningExprResult VisitInitListExpr(InitListExpr *E);
     // FIXME: DesignatedInitExpr
     // FIXME: ImplicitValueInitExpr
     // FIXME: ExtVectorElementExpr
@@ -581,6 +581,20 @@
 }
 
 Sema::OwningExprResult 
+TemplateExprInstantiator::VisitInitListExpr(InitListExpr *E) {
+  ExprVector Inits(SemaRef);
+  for (unsigned I = 0, N = E->getNumInits(); I != N; ++I) {
+    OwningExprResult Init = Visit(E->getInit(I));
+    if (Init.isInvalid())
+      return SemaRef.ExprError();
+    Inits.push_back(Init.takeAs<Expr>());
+  }
+
+  return SemaRef.ActOnInitList(E->getLBraceLoc(), move_arg(Inits),
+                               E->getRBraceLoc());
+}
+
+Sema::OwningExprResult 
 TemplateExprInstantiator::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) {
   bool isSizeOf = E->isSizeOf();