removeNotPreservedAnalysis().
authorDevang Patel <dpatel@apple.com>
Tue, 12 Dec 2006 23:07:44 +0000 (23:07 +0000)
committerDevang Patel <dpatel@apple.com>
Tue, 12 Dec 2006 23:07:44 +0000 (23:07 +0000)
Do not remove ImmutablePass from the list.

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

lib/VMCore/PassManager.cpp

index 867d9ae5fa72c4841b85c1af76dac2ac3de0cda0..1f1890c31f60dc74df0b6f9c4fd23e0f8cfa0af8 100644 (file)
@@ -580,13 +580,17 @@ void PMDataManager::removeNotPreservedAnalysis(Pass *P) {
 
   const std::vector<AnalysisID> &PreservedSet = AnUsage.getPreservedSet();
   for (std::map<AnalysisID, Pass*>::iterator I = AvailableAnalysis.begin(),
-         E = AvailableAnalysis.end(); I != E; ++I ) {
+         E = AvailableAnalysis.end(); I != E; ) {
     if (std::find(PreservedSet.begin(), PreservedSet.end(), I->first) == 
         PreservedSet.end()) {
       // Remove this analysis
-      std::map<AnalysisID, Pass*>::iterator J = I++;
-      AvailableAnalysis.erase(J);
-    }
+      if (!dynamic_cast<ImmutablePass*>(I->second)) {
+        std::map<AnalysisID, Pass*>::iterator J = I++;
+        AvailableAnalysis.erase(J);
+      } else
+        ++I;
+    } else
+      ++I;
   }
 }