diff options
| author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2016-05-31 18:46:31 +0000 |
|---|---|---|
| committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2016-05-31 18:46:31 +0000 |
| commit | 29b342351f3c9ee9f3ba86946984ac56a8ebeffc (patch) | |
| tree | 302cf6ea5469676b0f46ddc91142877897128bf2 /clang/lib/Parse/ParseExprCXX.cpp | |
| parent | fbdbe9e22ba3a383fff73546ff59b94f8a46f595 (diff) | |
| download | bcm5719-llvm-29b342351f3c9ee9f3ba86946984ac56a8ebeffc.tar.gz bcm5719-llvm-29b342351f3c9ee9f3ba86946984ac56a8ebeffc.zip | |
[Parser] Fix look ahead after EOF while parsing objc message and lambdas
If a closing ')' isn't found for a macro instantiation inside a '[',
the next token is EOF, this leads to crashes if we try to look ahead of
that. This could be triggered whenever trying to parse lambdas or objs
message expressions.
Differential Revision: http://reviews.llvm.org/D20451
rdar://problem/25662647
llvm-svn: 271314
Diffstat (limited to 'clang/lib/Parse/ParseExprCXX.cpp')
| -rw-r--r-- | clang/lib/Parse/ParseExprCXX.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp index b569e7aeba1..b0740970d88 100644 --- a/clang/lib/Parse/ParseExprCXX.cpp +++ b/clang/lib/Parse/ParseExprCXX.cpp @@ -739,8 +739,11 @@ ExprResult Parser::TryParseLambdaExpression() { && Tok.is(tok::l_square) && "Not at the start of a possible lambda expression."); - const Token Next = NextToken(), After = GetLookAheadToken(2); + const Token Next = NextToken(); + if (Next.is(tok::eof)) // Nothing else to lookup here... + return ExprEmpty(); + const Token After = GetLookAheadToken(2); // If lookahead indicates this is a lambda... if (Next.is(tok::r_square) || // [] Next.is(tok::equal) || // [= |

