summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2011-01-26 10:08:38 +0000
committerDuncan Sands <baldrick@free.fr>2011-01-26 10:08:38 +0000
commit69bdb585b23ba55150844bad1a1d007c81d5fd2c (patch)
tree1d96777bab80dafc71f5d8456a92d6e9a6212f9d /llvm/test
parent91543447a6f2a8862a50043b08b3b31550b4f0f9 (diff)
downloadbcm5719-llvm-69bdb585b23ba55150844bad1a1d007c81d5fd2c.tar.gz
bcm5719-llvm-69bdb585b23ba55150844bad1a1d007c81d5fd2c.zip
Fix PR9039, a use-after-free in reassociate. The issue was that the
operand being factorized (and erased) could occur several times in Ops, resulting in freed memory being used when the next occurrence in Ops was analyzed. llvm-svn: 124287
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/Reassociate/2011-01-26-UseAfterFree.ll35
1 files changed, 35 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Reassociate/2011-01-26-UseAfterFree.ll b/llvm/test/Transforms/Reassociate/2011-01-26-UseAfterFree.ll
new file mode 100644
index 00000000000..e6c76b34448
--- /dev/null
+++ b/llvm/test/Transforms/Reassociate/2011-01-26-UseAfterFree.ll
@@ -0,0 +1,35 @@
+; RUN: opt < %s -reassociate
+; PR9039
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
+target triple = "i386-gnu-linux"
+
+%ada__tags__T15s = type void ()
+
+define void @exp_averages_intraday__deviation() {
+entry:
+ %0 = load i32* undef, align 4
+ %1 = shl i32 %0, 2
+ %2 = add nsw i32 undef, %1
+ %3 = add nsw i32 %2, undef
+ %4 = mul nsw i32 %0, 12
+ %5 = add nsw i32 %3, %4
+ %6 = add nsw i32 %5, %4
+ %7 = add nsw i32 %6, undef
+ br i1 false, label %"4", label %"12"
+
+"4": ; preds = %entry
+ br i1 undef, label %"5", label %"8"
+
+"5": ; preds = %"4"
+ unreachable
+
+"8": ; preds = %"4"
+ %8 = getelementptr inbounds i8* undef, i32 %6
+ br i1 undef, label %"13", label %"12"
+
+"12": ; preds = %"8", %entry
+ ret void
+
+"13": ; preds = %"8"
+ ret void
+}
OpenPOWER on IntegriCloud