pass designators into sema.  This completes parser-level designator
support as far as I know.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58217 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Parse/ParseInit.cpp b/lib/Parse/ParseInit.cpp
index 655d8e7..82a33c2 100644
--- a/lib/Parse/ParseInit.cpp
+++ b/lib/Parse/ParseInit.cpp
@@ -236,14 +236,6 @@
 Parser::ExprResult Parser::ParseBraceInitializer() {
   SourceLocation LBraceLoc = ConsumeBrace();
   
-  // We support empty initializers, but tell the user that they aren't using
-  // C99-clean code.
-  if (Tok.is(tok::r_brace)) {
-    Diag(LBraceLoc, diag::ext_gnu_empty_initializer);
-    // Match the '}'.
-    return Actions.ActOnInitList(LBraceLoc, 0, 0, ConsumeBrace());
-  }
-  
   /// InitExprs - This is the actual list of expressions contained in the
   /// initializer.
   llvm::SmallVector<ExprTy*, 8> InitExprs;
@@ -252,6 +244,15 @@
   /// was specified for it, if any.
   InitListDesignations InitExprDesignations(Actions);
 
+  // We support empty initializers, but tell the user that they aren't using
+  // C99-clean code.
+  if (Tok.is(tok::r_brace)) {
+    Diag(LBraceLoc, diag::ext_gnu_empty_initializer);
+    // Match the '}'.
+    return Actions.ActOnInitList(LBraceLoc, 0, 0, InitExprDesignations,
+                                 ConsumeBrace());
+  }
+  
   bool InitExprsOk = true;
   
   while (1) {
@@ -293,8 +294,8 @@
     if (Tok.is(tok::r_brace)) break;
   }
   if (InitExprsOk && Tok.is(tok::r_brace))
-    return Actions.ActOnInitList(LBraceLoc, &InitExprs[0], InitExprs.size(), 
-                                 ConsumeBrace());
+    return Actions.ActOnInitList(LBraceLoc, &InitExprs[0], InitExprs.size(),
+                                 InitExprDesignations, ConsumeBrace());
   
   // On error, delete any parsed subexpressions.
   for (unsigned i = 0, e = InitExprs.size(); i != e; ++i)