summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Parse')
-rw-r--r--clang/lib/Parse/ParseExprCXX.cpp13
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();
}
OpenPOWER on IntegriCloud