// 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_
}
