[PATCH] D20451: [Parser] Fix look ahead after EOF while parsing objc message and lambdas
Bruno Cardoso Lopes via cfe-commits
cfe-commits at lists.llvm.org
Thu May 19 15:39:50 PDT 2016
bruno created this revision.
bruno added reviewers: doug.gregor, rsmith.
bruno added a subscriber: cfe-commits.
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.
http://reviews.llvm.org/D20451
Files:
lib/Parse/ParseExprCXX.cpp
test/Parser/objcxx11-messaging-and-lambda.mm
Index: test/Parser/objcxx11-messaging-and-lambda.mm
===================================================================
--- /dev/null
+++ test/Parser/objcxx11-messaging-and-lambda.mm
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
+
+#define OBJCLASS(name) // expected-note {{macro 'OBJCLASS' defined here}}
+
+class NSMutableData;
+
+NSMutableData *test() { // // expected-note {{to match this '{'}}
+ NSMutableData *data = [[[OBJCLASS(NSMutableDataOBJCLASS( alloc] init] autorelease]; // expected-error {{unterminated function-like macro invocation}} \
+ // expected-error {{expected ';' at end of declaration}}
+ return data;
+} // expected-error {{expected expression}} expected-error {{expected '}'}}
Index: lib/Parse/ParseExprCXX.cpp
===================================================================
--- lib/Parse/ParseExprCXX.cpp
+++ lib/Parse/ParseExprCXX.cpp
@@ -739,8 +739,11 @@
&& 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) || // [=
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20451.57868.patch
Type: text/x-patch
Size: 1390 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160519/e868777b/attachment.bin>
More information about the cfe-commits
mailing list