fix segfault (because of erasing after the vector boundaries) when the cached token...
authorNuno Lopes <nunoplopes@sapo.pt>
Sun, 26 Jul 2009 16:36:45 +0000 (16:36 +0000)
committerNuno Lopes <nunoplopes@sapo.pt>
Sun, 26 Jul 2009 16:36:45 +0000 (16:36 +0000)
llvm-svn: 77159

clang/lib/Lex/PPCaching.cpp

index 53aa09c..8087878 100644 (file)
@@ -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;