// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s | %FileCheck %s

// REQUIRES: CPU=x86_64

sil_stage canonical

import Builtin
import Swift
import SwiftShims

class Node {
  @sil_stored var index: Int { get set }
  init(index: Int)
  func check() -> Int
  @objc deinit
}

class ParentNode : Node {
  init(left: Node, right: Node, index: Int)
  @objc deinit
  override init(index: Int)
}

sil @_test_exact_checked_cast_branch : $@convention(method) (@guaranteed Node) -> Int {
bb0(%0 : $Node):
//CHECK-LABEL: @_test_exact_checked_cast_branch
//CHECK:       = load %swift.type
//CHECK-NEXT:  = icmp eq %swift.type
//CHECK-NEXT:  = bitcast
//CHECK-NEXT:  br i1
  checked_cast_br [exact] %0 : $Node to $ParentNode, bb2, bb3 // id: %2

bb1:                                   // Preds: bb2 bb3
  return undef : $Int

bb2(%5 : $ParentNode):                            // Preds: bb0
  br bb1                               // id: %10

bb3:                                              // Preds: bb0
  br bb1                              // id: %12
}

sil @_TFC9pic_crash4NodecfMS0_FT5indexSi_S0_ : $@convention(method) (Int, @owned Node) -> @owned Node
sil @_TFC9pic_crash4NodeCfMS0_FT5indexSi_S0_ : $@convention(thin) (Int, @thick Node.Type) -> @owned Node
sil [transparent] @_TFC9pic_crash4Nodeg5indexSi : $@convention(method) (@guaranteed Node) -> Int
sil [transparent] @_TFC9pic_crash4Nodes5indexSi : $@convention(method) (Int, @guaranteed Node) -> ()
sil @_TFC9pic_crash10ParentNodecfMS0_FT4leftCS_4Node5rightS1_5indexSi_S0_ : $@convention(method) (@owned Node, @owned Node, Int, @owned ParentNode) -> @owned ParentNode
sil @_TFC9pic_crash10ParentNodeCfMS0_FT4leftCS_4Node5rightS1_5indexSi_S0_ : $@convention(thin) (@owned Node, @owned Node, Int, @thick ParentNode.Type) -> @owned ParentNode
sil @_TFC9pic_crash10ParentNodecfMS0_FT5indexSi_S0_ : $@convention(method) (Int, @owned ParentNode) -> @owned ParentNode
sil @_TFC9pic_crash10ParentNodeCfMS0_FT5indexSi_S0_ : $@convention(thin) (Int, @thick ParentNode.Type) -> @owned ParentNode

sil_vtable Node {
  #Node.init!initializer.1: _TFC9pic_crash4NodecfMS0_FT5indexSi_S0_	// pic_crash.Node.init (pic_crash.Node.Type)(index : Swift.Int) -> pic_crash.Node
  #Node.check!1: _test_exact_checked_cast_branch	// pic_crash.Node.check (pic_crash.Node)() -> Swift.Int
  #Node.index!getter.1: _TFC9pic_crash4Nodeg5indexSi	// pic_crash.Node.index.getter : Swift.Int
  #Node.index!setter.1: _TFC9pic_crash4Nodes5indexSi	// pic_crash.Node.index.setter : Swift.Int
}

sil_vtable ParentNode {
  #Node.init!initializer.1: _TFC9pic_crash10ParentNodecfMS0_FT5indexSi_S0_	// pic_crash.ParentNode.init (pic_crash.ParentNode.Type)(index : Swift.Int) -> pic_crash.ParentNode
  #Node.check!1: _test_exact_checked_cast_branch	// pic_crash.Node.check (pic_crash.Node)() -> Swift.Int
  #Node.index!getter.1: _TFC9pic_crash4Nodeg5indexSi	// pic_crash.Node.index.getter : Swift.Int
  #Node.index!setter.1: _TFC9pic_crash4Nodes5indexSi	// pic_crash.Node.index.setter : Swift.Int
  #ParentNode.init!initializer.1: _TFC9pic_crash10ParentNodecfMS0_FT4leftCS_4Node5rightS1_5indexSi_S0_	// pic_crash.ParentNode.init (pic_crash.ParentNode.Type)(left : pic_crash.Node, right : pic_crash.Node, index : Swift.Int) -> pic_crash.ParentNode
}

