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. -Eli _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
