mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
77 lines
3.0 KiB
Swift
77 lines
3.0 KiB
Swift
// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -enable-sil-verify-all %s -sil-combine | %FileCheck %s
|
|
|
|
sil_stage canonical
|
|
|
|
import Builtin
|
|
import Swift
|
|
|
|
class Foo {
|
|
}
|
|
|
|
|
|
sil @_TFC4main3Food : $@convention(method) (@owned Foo) -> @owned Builtin.NativeObject {
|
|
bb0(%0 : $Foo):
|
|
debug_value %0 : $Foo, let, name "self" // id: %1
|
|
%2 = unchecked_ref_cast %0 : $Foo to $Builtin.NativeObject // user: %3
|
|
return %2 : $Builtin.NativeObject // id: %3
|
|
}
|
|
|
|
sil @_TFC4main3FooD : $@convention(method) (@owned Foo) -> () {
|
|
bb0(%0 : $Foo):
|
|
debug_value %0 : $Foo, let, name "self" // id: %1
|
|
// function_ref main.Foo.deinit
|
|
%2 = function_ref @_TFC4main3Food : $@convention(method) (@owned Foo) -> @owned Builtin.NativeObject // user: %3
|
|
%3 = apply %2(%0) : $@convention(method) (@owned Foo) -> @owned Builtin.NativeObject // user: %4
|
|
%4 = unchecked_ref_cast %3 : $Builtin.NativeObject to $Foo // user: %5
|
|
dealloc_ref %4 : $Foo // id: %5
|
|
%6 = tuple () // user: %7
|
|
return %6 : $() // id: %7
|
|
}
|
|
|
|
sil @_TFC4main3FoocfMS0_FT_S0_ : $@convention(method) (@owned Foo) -> @owned Foo {
|
|
bb0(%0 : $Foo):
|
|
debug_value %0 : $Foo, let, name "self" // id: %1
|
|
return %0 : $Foo // id: %2
|
|
}
|
|
|
|
sil @_TFC4main3FooCfMS0_FT_S0_ : $@convention(thin) (@thick Foo.Type) -> @owned Foo {
|
|
bb0(%0 : $@thick Foo.Type):
|
|
%1 = alloc_ref $Foo // user: %3
|
|
// function_ref main.Foo.init (main.Foo.Type)() -> main.Foo
|
|
%2 = function_ref @_TFC4main3FoocfMS0_FT_S0_ : $@convention(method) (@owned Foo) -> @owned Foo // user: %3
|
|
%3 = apply %2(%1) : $@convention(method) (@owned Foo) -> @owned Foo // user: %4
|
|
return %3 : $Foo // id: %4
|
|
}
|
|
|
|
sil [readonly] @_TF4main9readonly_funcFT_CS_3Foo : $@convention(thin) () -> @owned Foo {
|
|
bb0:
|
|
// function_ref main.Foo.__allocating_init (main.Foo.Type)() -> main.Foo
|
|
%0 = function_ref @_TFC4main3FooCfMS0_FT_S0_ : $@convention(thin) (@thick Foo.Type) -> @owned Foo // user: %2
|
|
%1 = metatype $@thick Foo.Type // user: %2
|
|
%2 = apply %0(%1) : $@convention(thin) (@thick Foo.Type) -> @owned Foo // user: %3
|
|
return %2 : $Foo // id: %3
|
|
}
|
|
|
|
//CHECK-LABEL: @_TF4main3bazFT_T_
|
|
//CHECK-NOT: function_ref
|
|
//CHECK-NOT: apply
|
|
//CHECK: tuple
|
|
//CHECK-NEXT: return
|
|
sil @_TF4main3bazFT_T_ : $@convention(thin) () -> () {
|
|
bb0:
|
|
// function_ref main.readonly_func () -> main.Foo
|
|
%0 = function_ref @_TF4main9readonly_funcFT_CS_3Foo : $@convention(thin) () -> @owned Foo // user: %1
|
|
%1 = apply %0() : $@convention(thin) () -> @owned Foo // users: %2, %3
|
|
debug_value %1 : $Foo, let, name "unused" // id: %2
|
|
strong_release %1 : $Foo // id: %3
|
|
%4 = tuple () // user: %5
|
|
return %4 : $() // id: %5
|
|
}
|
|
|
|
sil_vtable Foo {
|
|
#Foo.init!initializer.1: _TFC4main3FoocfMS0_FT_S0_ // main.Foo.init (main.Foo.Type)() -> main.Foo
|
|
}
|
|
|
|
|
|
|