Fix for PR185 & IndVarsSimplify/2003-12-15-Crash.llx
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10473 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp
index ed5aca3..763854e 100644
--- a/lib/Transforms/Scalar/IndVarSimplify.cpp
+++ b/lib/Transforms/Scalar/IndVarSimplify.cpp
@@ -26,6 +26,7 @@
#include "Support/Debug.h"
#include "Support/Statistic.h"
#include "Support/STLExtras.h"
+#include <algorithm>
using namespace llvm;
namespace {
@@ -206,6 +207,14 @@
PHIOps.insert(PHIOps.end(), MaybeDead->op_begin(),
MaybeDead->op_end());
MaybeDead->getParent()->getInstList().erase(MaybeDead);
+
+ // Erase any duplicates entries in the PHIOps list.
+ std::vector<Value*>::iterator It =
+ std::find(PHIOps.begin(), PHIOps.end(), MaybeDead);
+ while (It != PHIOps.end()) {
+ PHIOps.erase(It);
+ It = std::find(PHIOps.begin(), PHIOps.end(), MaybeDead);
+ }
// Erasing the instruction could invalidate the AfterPHI iterator!
AfterPHIIt = Header->begin();