Files
swift-mirror/test/SILOptimizer/unreachable_dealloc_stack.sil
Michael Gottesman 630a321a2e [sil] When printing out SILFunctions add a // end sil function comment after the closing brace of the SILFunction.
This ensures that we can write FileCheck patterns that match the end of sil
functions. Just using a FileCheck pattern against a brace is not sufficient in
the context of checking the SIL emitted by SILGen. This is because we could match a
different function's body and match the closing brace against the other
function's end brace.

With this change, one can be specific by checking:

// CHECK: } {{.*}} end sil function '<mangled name>'

The inspiration for this change is rdar://28685236. While updating SILGen tests
for that I have found many instances of SILGen tests pattern matching against
the wrong function bodies. This change will allow me to eliminate these problems
robustly.

rdar://29077869
2016-11-02 17:43:01 -07:00

36 lines
1.0 KiB
Plaintext

// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -module-name Swift -enable-sil-verify-all %s -diagnostics | %FileCheck %s
sil_stage raw
import Builtin
enum Never {}
class TheClass {}
// Ensure that when we remove the code after the apply of noreturn
// function nada, we don't fail verification on a dealloc_stack with
// an undef operand, but that we do later remove it in the diagnostics
// passes.
// CHECK-LABEL: sil @unreachable_deallocstack
sil @unreachable_deallocstack: $@convention(method) (@guaranteed TheClass) -> () {
bb0(%0 : $TheClass):
%1 = function_ref @nada : $@convention(c) (Builtin.Int32) -> Never
%2 = integer_literal $Builtin.Int32, 0
// CHECK: apply{{.*}}
%3 = apply %1(%2) : $@convention(c) (Builtin.Int32) -> Never
// CHECK-NEXT: unreachable
// CHECK-NOT: dealloc_stack
%4 = alloc_stack $TheClass
store %0 to %4 : $*TheClass
br bb1
bb1:
dealloc_stack %4 : $*TheClass
%5 = tuple ()
return %5 : $()
}
// CHECK-LABEL: sil @nada
sil @nada : $@convention(c) (Builtin.Int32) -> Never