[PATCH] Lex: Don't try to recover as hard in malformed _Pragma
David Majnemer
david.majnemer at gmail.com
Thu Aug 21 00:10:35 PDT 2014
Ping.
On Fri, Aug 15, 2014 at 6:59 PM, David Majnemer <david.majnemer at gmail.com>
wrote:
> Hi rsmith,
>
> It's not particularly safe to lex a token if you don't know what it is.
> _Pragma error recovery attempted to lex tokens without being sure what
> they might be.
>
> http://reviews.llvm.org/D4939
>
> Files:
> lib/Lex/Pragma.cpp
> test/Preprocessor/_Pragma.c
>
> Index: lib/Lex/Pragma.cpp
> ===================================================================
> --- lib/Lex/Pragma.cpp
> +++ lib/Lex/Pragma.cpp
> @@ -192,9 +192,7 @@
> Lex(Tok);
> if (!tok::isStringLiteral(Tok.getKind())) {
> Diag(PragmaLoc, diag::err__Pragma_malformed);
> - // Skip this token, and the ')', if present.
> - if (Tok.isNot(tok::r_paren) && Tok.isNot(tok::eof))
> - Lex(Tok);
> + // Skip this token if it's a ')'.
> if (Tok.is(tok::r_paren))
> Lex(Tok);
> return _PragmaLexing.failed();
> Index: test/Preprocessor/_Pragma.c
> ===================================================================
> --- test/Preprocessor/_Pragma.c
> +++ test/Preprocessor/_Pragma.c
> @@ -12,4 +12,6 @@
> #error #define invalid
> #endif
>
> -_Pragma( // expected-error{{_Pragma takes a parenthesized string literal}}
> +// expected-error at +2{{unterminated conditional directive}}
> +// expected-error at +1{{expected value in expression}}
> +#if _Pragma( // expected-error{{_Pragma takes a parenthesized string
> literal}}
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140821/a1192954/attachment.html>
More information about the cfe-commits
mailing list