[PM] Fix an iterator problem spotted by the MSVC debug iterators and
authorChandler Carruth <chandlerc@gmail.com>
Fri, 15 Nov 2013 21:56:44 +0000 (21:56 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 15 Nov 2013 21:56:44 +0000 (21:56 +0000)
AaronBallman. Thanks for the excellent review.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194857 91177308-0d34-0410-b5e6-96231b3b80d8

lib/IR/PassManager.cpp

index f706a0dc80b2ac8bb89c20b4a6f683976d162be8..966af7debc77340226d9b67360e9a8b3bda7a690 100644 (file)
@@ -47,11 +47,12 @@ void AnalysisManager::invalidateAll(Function *F) {
   FunctionAnalysisResultListT &ResultsList = FunctionAnalysisResultLists[F];
   for (FunctionAnalysisResultListT::iterator I = ResultsList.begin(),
                                              E = ResultsList.end();
-       I != E; ++I)
+       I != E;)
     if (I->second->invalidate(F)) {
-      FunctionAnalysisResultListT::iterator Old = I--;
-      InvalidatedPassIDs.push_back(Old->first);
-      ResultsList.erase(Old);
+      InvalidatedPassIDs.push_back(I->first);
+      I = ResultsList.erase(I);
+    } else {
+      ++I;
     }
   while (!InvalidatedPassIDs.empty())
     FunctionAnalysisResults.erase(
@@ -80,11 +81,12 @@ void AnalysisManager::invalidateAll(Module *M) {
     FunctionAnalysisResultListT &ResultsList = FI->second;
     for (FunctionAnalysisResultListT::iterator I = ResultsList.begin(),
                                                E = ResultsList.end();
-         I != E; ++I)
+         I != E;)
       if (I->second->invalidate(F)) {
-        FunctionAnalysisResultListT::iterator Old = I--;
-        InvalidatedPassIDs.push_back(Old->first);
-        ResultsList.erase(Old);
+        InvalidatedPassIDs.push_back(I->first);
+        I = ResultsList.erase(I);
+      } else {
+        ++I;
       }
     while (!InvalidatedPassIDs.empty())
       FunctionAnalysisResults.erase(