// RUN: %target-build-swift %s -Xfrontend -assume-parsing-unqualified-ownership-sil -emit-ir -o -
// REQUIRES: executable_test

// Make sure we are not crashing here.

sil_stage canonical

import Builtin
import Swift
import SwiftShims

class Hash {
  init()
  func update()
  func hash()
  @objc deinit
}

final class MD5 : Hash {
  override init()
  @objc deinit
}

sil @_TFC4main4HashcfMS0_FT_S0_ : $@convention(method) (@owned Hash) -> @owned Hash
sil @_TFC4main4HashCfMS0_FT_S0_ : $@convention(thin) (@thick Hash.Type) -> @owned Hash

sil @_TFC4main4Hash6updatefS0_FT_T_ : $@convention(method) (@guaranteed Hash) -> () {
bb0(%0 : $Hash):
  %1 = class_method %0 : $Hash, #Hash.hash!1 : (Hash) -> () -> (), $@convention(method) (@guaranteed Hash) -> () // user: %9
  checked_cast_br [exact] %0 : $Hash to $MD5, bb2, bb3 // id: %2

bb1:                                              // Preds: bb2 bb3
  %3 = tuple ()                                   // user: %4
  return %3 : $()                                 // id: %4

bb2(%5 : $MD5):                                   // Preds: bb0
  br bb1                                          // id: %8

bb3:                                              // Preds: bb0
  %9 = apply %1(%0) : $@convention(method) (@guaranteed Hash) -> ()
  br bb1                                          // id: %10
}

sil @_TFC4main4Hash4hashfS0_FT_T_ : $@convention(method) (@guaranteed Hash) -> ()
sil @_TFC4main3MD5cfMS0_FT_S0_ : $@convention(method) (@owned MD5) -> @owned MD5
sil @_TFC4main3MD5CfMS0_FT_S0_ : $@convention(thin) (@thick MD5.Type) -> @owned MD5

sil_vtable Hash {
  #Hash.init!initializer.1: @_TFC4main4HashcfMS0_FT_S0_	// main.Hash.init (main.Hash.Type)() -> main.Hash
  #Hash.update!1: @_TFC4main4Hash6updatefS0_FT_T_	// main.Hash.update (main.Hash)() -> ()
  #Hash.hash!1: @_TFC4main4Hash4hashfS0_FT_T_	// main.Hash.hash (main.Hash)() -> ()
}

sil_vtable MD5 {
  #Hash.init!initializer.1: @_TFC4main3MD5cfMS0_FT_S0_	// main.MD5.init (main.MD5.Type)() -> main.MD5
  #Hash.update!1: @_TFC4main4Hash6updatefS0_FT_T_	// main.Hash.update (main.Hash)() -> ()
  #Hash.hash!1: @_TFC4main4Hash4hashfS0_FT_T_	// main.Hash.hash (main.Hash)() -> ()
}



