| // RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -enable-sil-verify-all %s |
| |
| // REQUIRES: asserts |
| |
| // This file is meant to pass the verifier. |
| |
| import Builtin |
| |
| // Don't fail in the verifier on a shared unreachable exit block of two loops. |
| sil @dont_fail: $@convention(thin) (Builtin.Int1) -> () { |
| bb0(%0 : $Builtin.Int1): |
| %2 = integer_literal $Builtin.Int1, -1 |
| cond_br %0, bb1, bb5 |
| |
| // Loop. |
| bb1: |
| %4 = alloc_stack $Builtin.Int32 |
| cond_br %0, bb2, bb3 |
| |
| bb2: |
| dealloc_stack %4 : $*Builtin.Int32 |
| cond_br %0, bb4, bb1 |
| |
| // Cloned loop. |
| bb5: |
| %6 = alloc_stack $Builtin.Int32 |
| cond_br %0, bb6, bb3 |
| |
| bb6: |
| dealloc_stack %6 : $*Builtin.Int32 |
| cond_br %0, bb4, bb5 |
| |
| // Shared unreachable exit block. |
| bb3: |
| cond_fail %2 : $Builtin.Int1 |
| unreachable |
| |
| bb4: |
| %10 = tuple () |
| return %10 : $() |
| } |
| |
| |
| sil @dont_fail2: $@convention(thin) (Builtin.Int1) -> () { |
| bb0(%0 : $Builtin.Int1): |
| %2 = integer_literal $Builtin.Int1, -1 |
| cond_br %0, bb1, bb5 |
| |
| // Loop. |
| bb1: |
| %4 = alloc_stack $Builtin.Int32 |
| cond_br %0, bb2, bb3 |
| |
| bb2: |
| dealloc_stack %4 : $*Builtin.Int32 |
| cond_br %0, bb4, bb1 |
| |
| // Cloned loop. |
| bb5: |
| %6 = alloc_stack $Builtin.Int32 |
| cond_br %0, bb6, bb3 |
| |
| bb6: |
| dealloc_stack %6 : $*Builtin.Int32 |
| cond_br %0, bb4, bb5 |
| |
| // Shared unreachable exit block. |
| bb3: |
| cond_br %0, bb7, bb8 |
| |
| bb7: |
| cond_fail %2 : $Builtin.Int1 |
| unreachable |
| |
| bb8: |
| cond_fail %2 : $Builtin.Int1 |
| unreachable |
| |
| bb4: |
| %10 = tuple () |
| return %10 : $() |
| } |