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

sil_stage canonical

import Builtin
import Swift

class Hash {
  func update()
  func hash()
}

class MD5 : Hash {
  override init()
  override func hash()
}


sil @_TFC4test3MD5cfMS0_FT_S0_ : $@convention(method) (@owned MD5) -> @owned MD5 {
bb0(%0 : $MD5):
  release_value %0 : $MD5
  return %0 : $MD5
}

sil @_TFC4test3MD54hashfS0_FT3MsgVs5UInt8_T_ : $@convention(method) (@guaranteed MD5) -> ()
sil @_TFC4test4Hash4hashfS0_FT3MsgVs5UInt8_T_ : $@convention(method) (@guaranteed Hash) -> ()
sil @_TFC9hash2_new4Hash6updatefS0_FT3MsgVs5UInt83CntSi_T_ : $@convention(method) (@guaranteed Hash) -> ()

// CHECK-LABEL: @_TF4test8testHashFT_T_
sil @_TF4test8testHashFT_T_ : $@convention(thin) () -> () {
bb0:
  %0 = alloc_ref $MD5

  %1 = function_ref @_TFC4test3MD5cfMS0_FT_S0_ : $@convention(method) (@owned MD5) -> @owned MD5
  %2 = apply %1(%0) : $@convention(method) (@owned MD5) -> @owned MD5
  strong_retain %2 : $MD5
  %69 = upcast %2 : $MD5 to $Hash
  strong_retain %69 : $Hash
  // CHECK: function_ref @_TFC4test3MD54hashfS0_FT3MsgVs5UInt8_T_ : $@convention(method) (@guaranteed MD5) -> ()
  // CHECK: apply {{%[0-9]+}}({{%[0-9]+}}) : $@convention(method) (@guaranteed MD5) -> ()
  %134 = class_method %69 : $Hash, #Hash.hash!1 : (Hash) -> () -> () , $@convention(method) (@guaranteed Hash) -> ()
  %135 = apply %134(%69) : $@convention(method) (@guaranteed Hash) -> ()
  strong_release %2 : $MD5
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: @test_unchecked_ref
sil @test_unchecked_ref : $@convention(thin) () -> () {
bb0:
  %0 = alloc_ref $MD5
  %11 = upcast %0 : $MD5 to $Hash
  %21 = unchecked_ref_cast %11 : $Hash to $MD5
  %61 = upcast %21 : $MD5 to $Hash 
  // CHECK: function_ref @_TFC9hash2_new4Hash6updatefS0_FT3MsgVs5UInt83CntSi_T_ : $@convention(method) (@guaranteed Hash) -> ()
  // CHECK: apply {{%[0-9]+}}({{%[0-9]+}}) : $@convention(method) (@guaranteed Hash) -> ()
  %62 = class_method %61 : $Hash, #Hash.update!1 : (Hash) -> () -> () , $@convention(method) (@guaranteed Hash) -> ()
  %135 = apply %62(%61) : $@convention(method) (@guaranteed Hash) -> ()
  %17 = tuple ()
  // CHECK: return
  return %17 : $()
}

sil_vtable Hash {
  #Hash.update!1: _TFC9hash2_new4Hash6updatefS0_FT3MsgVs5UInt83CntSi_T_
  #Hash.hash!1: _TFC4test4Hash4hashfS0_FT3MsgVs5UInt8_T_
}

sil_vtable MD5 {
  // vtable should be keyed with the least-derived method, otherwise
  // devirtualizer will choose the wrong function ref.
  #Hash.hash!1: _TFC4test3MD54hashfS0_FT3MsgVs5UInt8_T_
  #MD5.init!initializer.1: _TFC4test3MD5cfMS0_FT_S0_
  #Hash.update!1: _TFC9hash2_new4Hash6updatefS0_FT3MsgVs5UInt83CntSi_T_
}

class C {
  func doIt()
}

class D : C {
  override func doIt()
}

class E : D {
  override func doIt()
}

// CHECK-LABEL: sil @_TFC1b1C4doItfS0_FT_T_
sil @_TFC1b1C4doItfS0_FT_T_ : $@convention(method) (@guaranteed C) -> () {
bb0(%0 : $C):
  %2 = tuple ()
  return %2 : $()
}

// CHECK-LABEL: sil @_TFC1b1D4doItfS0_FT_T_
sil @_TFC1b1D4doItfS0_FT_T_ : $@convention(method) (@guaranteed D) -> () {
bb0(%0 : $D):
  %2 = tuple ()
  return %2 : $()
}


// CHECK-LABEL: sil @_TFC1b1E4doItfS0_FT_T_
sil @_TFC1b1E4doItfS0_FT_T_ : $@convention(method) (@guaranteed E) -> () {
bb0(%0 : $E):
  %2 = tuple ()
  return %2 : $()
}


// CHECK-LABEL: sil @_TF1b3fooFT_T_
sil @_TF1b3fooFT_T_ : $@convention(thin) () -> () {
bb0:
  %0 = alloc_ref $E
  %1 = upcast %0 : $E to $C
  %2 = unconditional_checked_cast %1 : $C to $D
  %3 = class_method %2 : $D, #D.doIt!1 : (D) -> () -> () , $@convention(method) (@guaranteed D) -> ()
  %4 = apply %3(%2) : $@convention(method) (@guaranteed D) -> ()
  %5 = tuple ()
// CHECK: return
  return %5 : $()
}

sil_vtable C {
  #C.doIt!1: _TFC1b1C4doItfS0_FT_T_
}

sil_vtable D {
  #C.doIt!1: _TFC1b1D4doItfS0_FT_T_
}

sil_vtable E {
  #C.doIt!1: _TFC1b1E4doItfS0_FT_T_
}
