From 63dae6e5ad23cab32f5e556c1b0dc3e4576edc83 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 12 Jul 2010 04:25:32 +0000 Subject: [PATCH] we do in fact have to cache the EOF token returned by the preprocessor. In the case of backtracking, the cached token lexer will be the only lexer on the stack, without this the token stack will be empty and EOF won't be returned. This fixes PR7072. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108124 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Lex/PPCaching.cpp | 9 +++------ test/Parser/backtrack-crash.cpp | 4 ++++ 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 test/Parser/backtrack-crash.cpp diff --git a/lib/Lex/PPCaching.cpp b/lib/Lex/PPCaching.cpp index 6aeb6fa3a2..20e3b3dd9d 100644 --- a/lib/Lex/PPCaching.cpp +++ b/lib/Lex/PPCaching.cpp @@ -60,13 +60,10 @@ void Preprocessor::CachingLex(Token &Result) { return; } - // We should cache the lexed token. - + // Cache the lexed token. EnterCachingLexMode(); - if (Result.isNot(tok::eof)) { - CachedTokens.push_back(Result); - ++CachedLexPos; - } + CachedTokens.push_back(Result); + ++CachedLexPos; } void Preprocessor::EnterCachingLexMode() { diff --git a/test/Parser/backtrack-crash.cpp b/test/Parser/backtrack-crash.cpp new file mode 100644 index 0000000000..cc26873729 --- /dev/null +++ b/test/Parser/backtrack-crash.cpp @@ -0,0 +1,4 @@ +// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic +// PR7072 +()( // expected-error {{expected unqualified-id}} + -- 2.40.0