From bd2cd92907dcab4a6fb78b08842f5867071ad3c2 Mon Sep 17 00:00:00 2001 From: Nuno Lopes Date: Sun, 26 Jul 2009 16:36:45 +0000 Subject: [PATCH] fix segfault (because of erasing after the vector boundaries) when the cached token position is at the end llvm-svn: 77159 --- clang/lib/Lex/PPCaching.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/Lex/PPCaching.cpp b/clang/lib/Lex/PPCaching.cpp index 53aa09c..8087878 100644 --- a/clang/lib/Lex/PPCaching.cpp +++ b/clang/lib/Lex/PPCaching.cpp @@ -102,7 +102,8 @@ void Preprocessor::AnnotatePreviousCachedTokens(const Token &Tok) { assert((BacktrackPositions.empty() || BacktrackPositions.back() < i) && "The backtrack pos points inside the annotated tokens!"); // Replace the cached tokens with the single annotation token. - CachedTokens.erase(AnnotBegin + 1, CachedTokens.begin() + CachedLexPos); + if (i < CachedLexPos) + CachedTokens.erase(AnnotBegin + 1, CachedTokens.begin() + CachedLexPos); *AnnotBegin = Tok; CachedLexPos = i; return; -- 2.7.4