From cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697 Mon Sep 17 00:00:00 2001
From: Richard Smith <richard-llvm@metafoo.co.uk>
Date: Wed, 19 Dec 2012 02:27:38 +0000
Subject: [PATCH] Fix assertion failure in self-host (and probably bogus
 template instantiation too). When instantiating a direct-initializer, if we
 find it has zero arguments, produce an empty ParenListExpr rather than
 returning a null expression.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170490 91177308-0d34-0410-b5e6-96231b3b80d8
---
 lib/Sema/TreeTransform.h                              |  4 ----
 test/SemaTemplate/instantiate-member-initializers.cpp | 10 ++++++++++
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index 52f6c4d4c08..c161d8cfcb2 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -2622,10 +2622,6 @@ ExprResult TreeTransform<Derived>::TransformInitializer(Expr *Init,
                                         Construct->getLocEnd(),
                                         Construct->getType());
 
-  // Treat an empty initializer like none.
-  if (NewArgs.empty())
-    return SemaRef.Owned((Expr*)0);
-
   // Build a ParenListExpr to represent anything else.
   SourceRange Parens = Construct->getParenRange();
   return getDerived().RebuildParenListExpr(Parens.getBegin(), NewArgs,
diff --git a/test/SemaTemplate/instantiate-member-initializers.cpp b/test/SemaTemplate/instantiate-member-initializers.cpp
index 45503b38b38..297ae917bb4 100644
--- a/test/SemaTemplate/instantiate-member-initializers.cpp
+++ b/test/SemaTemplate/instantiate-member-initializers.cpp
@@ -25,3 +25,13 @@ public:
   BB() : AA<T>(1) {}
 };
 BB<int> x;
+
+struct X {
+  X();
+};
+template<typename T>
+struct Y {
+  Y() : x() {}
+  X x;
+};
+Y<int> y;
-- 
GitLab