// RUN: %target-sil-opt -enable-sil-verify-all %s -inline -devirtualizer | %FileCheck %s

sil_stage canonical

import Builtin
import Swift

class ABC {
 init(y : Int)
 func member()
 func member2()
}


// This is our c'tor.
sil @_TFC4main3ABCcfMS0_FT1ySi_S0_ : $@convention(method) (Int64, @owned ABC) -> @owned ABC {
bb0(%0 : $Int64, %1 : $ABC):
  return %1 : $ABC                                // id: %38
}

sil @_TFC4main3ABC6memberfS0_FT_T_ : $@convention(method) (@guaranteed ABC) -> ()
sil @_TFC4main3ABC7member2fS0_FT_T_ : $@convention(method) (@guaranteed ABC) -> ()
sil @_TFC4main3ABCCfMS0_FT1ySi_S0_ : $@convention(thin) (Int64, @thick ABC.Type) -> @owned ABC

//CHECK:@_TF4main3fooFT_T_
//CHECK: function_ref @_TFC4main3ABC6memberfS0_FT_T_
//CHECK: function_ref @_TFC4main3ABC7member2fS0_FT_T_
//CHECK: return
sil @_TF4main3fooFT_T_ : $@convention(thin) () -> () {
bb0:
  %0 = integer_literal $Builtin.Int64, 7          // user: %1
  %1 = struct $Int64 (%0 : $Builtin.Int64)        // user: %4
  %2 = alloc_ref $ABC                             // user: %4
  // function_ref main.ABC.init (main.ABC.Type)(y : Swift.Int64) -> main.ABC
  %3 = function_ref @_TFC4main3ABCcfMS0_FT1ySi_S0_ : $@convention(method) (Int64, @owned ABC) -> @owned ABC // user: %4
  %4 = apply %3(%1, %2) : $@convention(method) (Int64, @owned ABC) -> @owned ABC // users: %7, %6, %5, %10, %9, %8, %11
  %6 = class_method %4 : $ABC, #ABC.member!1 : (ABC) -> () -> (), $@convention(method) (@guaranteed ABC) -> () // user: %7
  %7 = apply %6(%4) : $@convention(method) (@guaranteed ABC) -> ()
  %9 = class_method %4 : $ABC, #ABC.member2!1 : (ABC) -> () -> (), $@convention(method) (@guaranteed ABC) -> () // user: %10
  %10 = apply %9(%4) : $@convention(method) (@guaranteed ABC) -> ()
  strong_release %4 : $ABC                        // id: %11
  %12 = tuple ()                                  // user: %13
  return %12 : $()                                // id: %13
}

sil_vtable ABC {
  #ABC.member!1: @_TFC4main3ABC6memberfS0_FT_T_  // main.ABC.member (main.ABC)() -> ()
  #ABC.member2!1: @_TFC4main3ABC7member2fS0_FT_T_  // main.ABC.member2 (main.ABC)() -> ()
}
