// RUN: %target-sil-opt -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
}



