diff options
author | Dan Gohman <gohman@apple.com> | 2010-03-20 03:53:53 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-03-20 03:53:53 +0000 |
commit | 472fdf7090bb00af3a3f9dcbe22263120a527533 (patch) | |
tree | 22acb773efd1cd75c2fab43beb7d8e8a166e3897 /include/llvm/Analysis/ScalarEvolutionExpander.h | |
parent | 1ad584e93d3f615c86405c1d010fe9f0535acd26 (diff) | |
download | external_llvm-472fdf7090bb00af3a3f9dcbe22263120a527533.zip external_llvm-472fdf7090bb00af3a3f9dcbe22263120a527533.tar.gz external_llvm-472fdf7090bb00af3a3f9dcbe22263120a527533.tar.bz2 |
Clear the SCEVExpander's insertion point after making deletions,
so that the SCEVExpander doesn't retain a dangling pointer as its
insert position. The dangling pointer in this case wasn't ever used
to insert new instructions, but it was causing trouble with
SCEVExpander's code for automatically advancing its insert position
past debug intrinsics.
This fixes use-after-free errors that valgrind noticed in
test/Transforms/IndVarSimplify/2007-06-06-DeleteDanglesPtr.ll and
test/Transforms/IndVarSimplify/exit_value_tests.ll.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99036 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Analysis/ScalarEvolutionExpander.h')
-rw-r--r-- | include/llvm/Analysis/ScalarEvolutionExpander.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/llvm/Analysis/ScalarEvolutionExpander.h b/include/llvm/Analysis/ScalarEvolutionExpander.h index 8287094..dc9b73b 100644 --- a/include/llvm/Analysis/ScalarEvolutionExpander.h +++ b/include/llvm/Analysis/ScalarEvolutionExpander.h @@ -104,6 +104,13 @@ namespace llvm { /// is useful for late optimization passes. void disableCanonicalMode() { CanonicalMode = false; } + /// clearInsertPoint - Clear the current insertion point. This is useful + /// if the instruction that had been serving as the insertion point may + /// have been deleted. + void clearInsertPoint() { + Builder.ClearInsertionPoint(); + } + private: LLVMContext &getContext() const { return SE.getContext(); } |