From: Eli Friedman Date: Thu, 19 Sep 2013 01:51:23 +0000 (+0000) Subject: Fix use-after-free in r190980. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0f238a61be7ba8a52383fc3419889d52431316d4;p=clang Fix use-after-free in r190980. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190984 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp index 2570755cbd..e6b6b1fe1c 100644 --- a/lib/Lex/Lexer.cpp +++ b/lib/Lex/Lexer.cpp @@ -2823,9 +2823,12 @@ bool Lexer::Lex(Token &Result) { bool atPhysicalStartOfLine = IsAtPhysicalStartOfLine; IsAtPhysicalStartOfLine = false; - bool result = LexTokenInternal(Result, atPhysicalStartOfLine); - assert((result || !isLexingRawMode()) && "Raw lex must succeed"); - return result; + bool isRawLex = isLexingRawMode(); + (void) isRawLex; + bool returnedToken = LexTokenInternal(Result, atPhysicalStartOfLine); + // (After the LexTokenInternal call, the lexer might be destroyed.) + assert((returnedToken || !isRawLex) && "Raw lex must succeed"); + return returnedToken; } /// LexTokenInternal - This implements a simple C family lexer. It is an