[LVI] Fix potential memory corruption in getValueFromCondition
Rewrite Visited[Cond] = getValueFromConditionImpl(..., Visited) statement which can lead to a memory corruption since getValueFromConditionImpl changes Visited map and invalidates the iterators.
llvm-svn: 278514
diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp
index 8c09010..7a94048 100644
--- a/llvm/lib/Analysis/LazyValueInfo.cpp
+++ b/llvm/lib/Analysis/LazyValueInfo.cpp
@@ -1260,8 +1260,10 @@
auto I = Visited.find(Cond);
if (I != Visited.end())
return I->second;
- return Visited[Cond] = getValueFromConditionImpl(Val, Cond, isTrueDest,
- Visited);
+
+ auto Result = getValueFromConditionImpl(Val, Cond, isTrueDest, Visited);
+ Visited[Cond] = Result;
+ return Result;
}
LVILatticeVal getValueFromCondition(Value *Val, Value *Cond, bool isTrueDest) {