Make ScalarEvolution::forgetLoop forget all contained loops too, because

they may have ValuesAtScopes map entries referencing their outer loops.
This fixes a user-after-free reported in PR8471.

llvm-svn: 117698
This commit is contained in:
Dan Gohman 2010-10-29 20:16:10 +00:00
parent acc8709850
commit dcb354b234
1 changed files with 5 additions and 0 deletions

View File

@ -3781,6 +3781,11 @@ void ScalarEvolution::forgetLoop(const Loop *L) {
PushDefUseChildren(I, Worklist);
}
// Forget all contained loops too, to avoid dangling entries in the
// ValuesAtScopes map.
for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I)
forgetLoop(*I);
}
/// forgetValue - This method should be called by the client when it has