On May 2, 2012, at 6:56 PM, Eli Friedman wrote: > On Wed, May 2, 2012 at 6:01 PM, Argyrios Kyrtzidis <[email protected]> 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.
In r156081, thanks for reviewing! > > -Eli _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
