From: Chandler Carruth Date: Fri, 15 Nov 2013 21:56:44 +0000 (+0000) Subject: [PM] Fix an iterator problem spotted by the MSVC debug iterators and X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=4303b091d0b0c4982efde6f575f4dfd72ff14c42;p=oota-llvm.git [PM] Fix an iterator problem spotted by the MSVC debug iterators and AaronBallman. Thanks for the excellent review. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194857 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/PassManager.cpp b/lib/IR/PassManager.cpp index f706a0dc80b..966af7debc7 100644 --- a/lib/IR/PassManager.cpp +++ b/lib/IR/PassManager.cpp @@ -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(