[cfe-commits] r156043 - /cfe/trunk/lib/Lex/LiteralSupport.cpp

Eli Friedman eli.friedman at gmail.com
Wed May 2 18:56:55 PDT 2012


On Wed, May 2, 2012 at 6:01 PM, Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:
> Author: akirtzidis
> Date: Wed May  2 20:01:56 2012
> New Revision: 156043
>
> URL: http://llvm.org/viewvc/llvm-project?rev=156043&view=rev
> Log:
> In StringLiteralParser::init(), fail gracefully if the string is
> not as we expect; it may be due to racing issue of a file coming from PCH
> changing after the PCH is loaded.
>
> rdar://11353109
>
> Modified:
>    cfe/trunk/lib/Lex/LiteralSupport.cpp
>
> Modified: cfe/trunk/lib/Lex/LiteralSupport.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/LiteralSupport.cpp?rev=156043&r1=156042&r2=156043&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Lex/LiteralSupport.cpp (original)
> +++ cfe/trunk/lib/Lex/LiteralSupport.cpp Wed May  2 20:01:56 2012
> @@ -1192,7 +1192,12 @@
>         if (DiagnoseBadString(StringToks[i]))
>           hadError = true;
>     } else {
> -      assert(ThisTokBuf[0] == '"' && "Expected quote, lexer broken?");
> +      if (ThisTokBuf[0] != '"') {
> +        // The file may have come from PCH and then changed after loading the
> +        // PCH; Fail gracefully.
> +        hadError = true;
> +        continue;
> +      }
>       ++ThisTokBuf; // skip "

If we're calling the literal parser from Sema (or anywhere else that
expects diagnostics), this recovery won't work correctly... setting
hadError without actually printing a diagnostic will lead to an
invalid AST, which is likely to explode later on.

-Eli




More information about the cfe-commits mailing list