From d6a934d4f195307acb48b41594fc447299be635e Mon Sep 17 00:00:00 2001
From: Richard Smith <richard-llvm@metafoo.co.uk>
Date: Tue, 27 Oct 2015 07:25:29 +0000
Subject: [PATCH] Work around incomplete list initialization support in older
 MSVC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251391 91177308-0d34-0410-b5e6-96231b3b80d8
---
 include/clang/AST/ExprCXX.h | 21 +++++++++++++++++----
 include/clang/AST/StmtCXX.h |  4 +++-
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/include/clang/AST/ExprCXX.h b/include/clang/AST/ExprCXX.h
index 055542650f4..cd14afaf400 100644
--- a/include/clang/AST/ExprCXX.h
+++ b/include/clang/AST/ExprCXX.h
@@ -4040,16 +4040,29 @@ public:
              Resume->isValueDependent(),
              Operand->isInstantiationDependent(),
              Operand->containsUnexpandedParameterPack()),
-      CoawaitLoc(CoawaitLoc),
-      SubExprs{Operand, Ready, Suspend, Resume} {}
+      CoawaitLoc(CoawaitLoc) {
+    SubExprs[CoawaitExpr::Operand] = Operand;
+    SubExprs[CoawaitExpr::Ready] = Ready;
+    SubExprs[CoawaitExpr::Suspend] = Suspend;
+    SubExprs[CoawaitExpr::Resume] = Resume;
+  }
   CoawaitExpr(SourceLocation CoawaitLoc, QualType Ty, Expr *Operand)
       : Expr(CoawaitExprClass, Ty, VK_RValue, OK_Ordinary,
              true, true, true, Operand->containsUnexpandedParameterPack()),
-        CoawaitLoc(CoawaitLoc), SubExprs{Operand} {
+        CoawaitLoc(CoawaitLoc) {
     assert(Operand->isTypeDependent() && Ty->isDependentType() &&
            "wrong constructor for non-dependent co_await expression");
+    SubExprs[CoawaitExpr::Operand] = Operand;
+    SubExprs[CoawaitExpr::Ready] = nullptr;
+    SubExprs[CoawaitExpr::Suspend] = nullptr;
+    SubExprs[CoawaitExpr::Resume] = nullptr;
+  }
+  CoawaitExpr(EmptyShell Empty) : Expr(CoawaitExprClass, Empty) {
+    SubExprs[CoawaitExpr::Operand] = nullptr;
+    SubExprs[CoawaitExpr::Ready] = nullptr;
+    SubExprs[CoawaitExpr::Suspend] = nullptr;
+    SubExprs[CoawaitExpr::Resume] = nullptr;
   }
-  CoawaitExpr(EmptyShell Empty) : Expr(CoawaitExprClass, Empty) {}
 
   SourceLocation getKeywordLoc() const { return CoawaitLoc; }
   Expr *getOperand() const {
diff --git a/include/clang/AST/StmtCXX.h b/include/clang/AST/StmtCXX.h
index 1dfc74425ee..982181e3717 100644
--- a/include/clang/AST/StmtCXX.h
+++ b/include/clang/AST/StmtCXX.h
@@ -298,7 +298,9 @@ class CoroutineBodyStmt : public Stmt {
   friend class ASTStmtReader;
 public:
   CoroutineBodyStmt(Stmt *Body)
-      : Stmt(CoroutineBodyStmtClass), SubStmts{Body} {}
+      : Stmt(CoroutineBodyStmtClass) {
+    SubStmts[CoroutineBodyStmt::Body] = Body;
+  }
 
   /// \brief Retrieve the body of the coroutine as written. This will be either
   /// a CompoundStmt or a TryStmt.
-- 
GitLab