| // RUN: %empty-directory(%t) |
| // RUN: not --crash %target-sil-opt -assume-parsing-unqualified-ownership-sil -enable-sil-verify-all %s 2> %t/err.txt |
| // RUN: %FileCheck %s < %t/err.txt |
| |
| // REQUIRES: asserts |
| |
| // The test in this file is meant to fail the verifier. |
| |
| import Builtin |
| |
| // CHECK: SIL verification failed: return with stack allocs that haven't been deallocated: state.Stack.empty() |
| |
| sil @fail1: $@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 partially unreachable exit block. |
| bb3: |
| cond_br %0, bb7, bb4 |
| |
| bb7: |
| cond_fail %2 : $Builtin.Int1 |
| unreachable |
| |
| bb4: |
| %10 = tuple () |
| return %10 : $() |
| } |