diff options
Diffstat (limited to 'clang/lib/Parse')
| -rw-r--r-- | clang/lib/Parse/ParseExprCXX.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp index 355503caa9b..68bd45e38d1 100644 --- a/clang/lib/Parse/ParseExprCXX.cpp +++ b/clang/lib/Parse/ParseExprCXX.cpp @@ -716,9 +716,16 @@ ExprResult Parser::ParseLambdaExpression() { Optional<unsigned> DiagID = ParseLambdaIntroducer(Intro); if (DiagID) { Diag(Tok, DiagID.getValue()); - SkipUntil(tok::r_square, StopAtSemi); - SkipUntil(tok::l_brace, StopAtSemi); - SkipUntil(tok::r_brace, StopAtSemi); + auto SkipUntilLambdaToken = [&](tok::TokenKind LambdaToken) { + // Don't skip past the end of the default argument. + SkipUntil(LambdaToken, tok::cxx_defaultarg_end, + StopAtSemi | StopBeforeMatch); + if (Tok.is(LambdaToken)) + ConsumeAnyToken(); + }; + SkipUntilLambdaToken(tok::r_square); + SkipUntilLambdaToken(tok::l_brace); + SkipUntilLambdaToken(tok::r_brace); return ExprError(); } |

