[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