aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Transforms/IPO/DeadTypeElimination.cpp9
-rw-r--r--lib/VMCore/PassManagerT.h9
2 files changed, 4 insertions, 14 deletions
diff --git a/lib/Transforms/IPO/DeadTypeElimination.cpp b/lib/Transforms/IPO/DeadTypeElimination.cpp
index 2ea9ac2a56..cfd0c39569 100644
--- a/lib/Transforms/IPO/DeadTypeElimination.cpp
+++ b/lib/Transforms/IPO/DeadTypeElimination.cpp
@@ -77,15 +77,10 @@ bool DTE::run(Module &M) {
for (SymbolTable::VarMap::iterator PI = Plane.begin(); PI != Plane.end();)
// If this entry should be unconditionally removed, or if we detect that
// the type is not used, remove it.
- //
if (ShouldNukeSymtabEntry(*PI) ||
!UsedTypes.count(cast<Type>(PI->second))) {
-#if MAP_IS_NOT_BRAINDEAD
- PI = Plane.erase(PI); // STD C++ Map should support this!
-#else
- Plane.erase(PI); // Alas, GCC 2.95.3 doesn't *SIGH*
- PI = Plane.begin();
-#endif
+ SymbolTable::VarMap::iterator PJ = PI++;
+ Plane.erase(PJ);
++NumKilled;
Changed = true;
} else {
diff --git a/lib/VMCore/PassManagerT.h b/lib/VMCore/PassManagerT.h
index 53ce19f2e1..315d9d67e4 100644
--- a/lib/VMCore/PassManagerT.h
+++ b/lib/VMCore/PassManagerT.h
@@ -261,13 +261,8 @@ public:
++I; // This analysis is preserved, leave it in the available set...
else {
if (!dynamic_cast<ImmutablePass*>(I->second)) {
-#if MAP_DOESNT_HAVE_BROKEN_ERASE_MEMBER
- I = CurrentAnalyses.erase(I); // Analysis not preserved!
-#else
- // GCC 2.95.3 STL doesn't have correct erase member!
- CurrentAnalyses.erase(I);
- I = CurrentAnalyses.begin();
-#endif
+ std::map<AnalysisID, Pass*>::iterator J = I++;
+ CurrentAnalyses.erase(J); // Analysis not preserved!
} else {
++I;
}