diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2015-02-28 16:47:27 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2015-02-28 16:47:27 +0000 |
commit | 6b7603962adaca5fd403cefd74e7fe32fdbcc8db (patch) | |
tree | c2924ff1cf1a2f13e36254df3f02514c151521c0 /test | |
parent | fa22cce8d765eaa52434f67ef43c842ff648e153 (diff) |
TRE: Just erase dead BBs and tweak the iteration loop not to increment the deleted BB iterator.
Leaving empty blocks around just opens up a can of bugs like PR22704. Deleting
them early also slightly simplifies code.
Thanks to Sanjay for the IR test case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230856 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/Transforms/TailCallElim/inf-recursion.ll | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/test/Transforms/TailCallElim/inf-recursion.ll b/test/Transforms/TailCallElim/inf-recursion.ll index 157226f93d3..c121c25aee9 100644 --- a/test/Transforms/TailCallElim/inf-recursion.ll +++ b/test/Transforms/TailCallElim/inf-recursion.ll @@ -31,3 +31,24 @@ define float @fabsf(float %f) { } declare x86_fp80 @fabsl(x86_fp80 %f) + +; Don't crash while transforming a function with infinite recursion. +define i32 @PR22704(i1 %bool) { +entry: + br i1 %bool, label %t, label %f + +t: + %call1 = call i32 @PR22704(i1 1) + br label %return + +f: + %call = call i32 @PR22704(i1 1) + br label %return + +return: + ret i32 0 + +; CHECK-LABEL: @PR22704( +; CHECK: %bool.tr = phi i1 [ %bool, %entry ], [ true, %t ], [ true, %f ] +; CHECK: br i1 %bool.tr, label %t, label %f +} |