diff options
Diffstat (limited to 'lib/Parse/ParseInit.cpp')
-rw-r--r-- | lib/Parse/ParseInit.cpp | 12 |
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); |