Fix PR3001: if we have an error parsing an initializer, make sure to remove
the designator corresponding to it, otherwise Sema and later parsing will
get confused.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58603 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Parse/ParseInit.cpp b/lib/Parse/ParseInit.cpp
index 82a33c2..9b48856 100644
--- a/lib/Parse/ParseInit.cpp
+++ b/lib/Parse/ParseInit.cpp
@@ -263,10 +263,18 @@
     ExprResult SubElt;
     if (!MayBeDesignationStart(Tok.getKind(), PP))
       SubElt = ParseInitializer();
-    else
+    else {
       SubElt = ParseInitializerWithPotentialDesignator(InitExprDesignations,
                                                        InitExprs.size());
-
+      
+      // If we had an erroneous initializer, and we had a potentially valid
+      // designator, make sure to remove the designator from
+      // InitExprDesignations, otherwise we'll end up with a designator with no
+      // making initializer.
+      if (SubElt.isInvalid)
+        InitExprDesignations.EraseDesignation(InitExprs.size());
+    }
+    
     // If we couldn't parse the subelement, bail out.
     if (!SubElt.isInvalid) {
       InitExprs.push_back(SubElt.Val);