aboutsummaryrefslogtreecommitdiff
path: root/lib/Parse/ParseInit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Parse/ParseInit.cpp')
-rw-r--r--lib/Parse/ParseInit.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/Parse/ParseInit.cpp b/lib/Parse/ParseInit.cpp
index 82a33c21da..9b488566a6 100644
--- a/lib/Parse/ParseInit.cpp
+++ b/lib/Parse/ParseInit.cpp
@@ -263,10 +263,18 @@ Parser::ExprResult Parser::ParseBraceInitializer() {
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);