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

import Swift

// FIXME: Should go into the standard library.
public extension _ObjectiveCBridgeable {
  static func _unconditionallyBridgeFromObjectiveC(_ source: _ObjectiveCType?)
      -> Self
}

@objc class NSCloud {}

struct Butt: _ObjectiveCBridgeable {
  typealias _ObjectiveCType = NSCloud
  func _bridgeToObjectiveC() -> NSCloud
  static func _forceBridgeFromObjectiveC(_ source: NSCloud,
                                         result: inout Butt?)
  static func _conditionallyBridgeFromObjectiveC(_ source: NSCloud,
                                         result: inout Butt?) -> Bool
}

sil @checked_cast_object_to_value : $@convention(thin) () -> () {
entry:
  %b = alloc_stack $NSCloud
  %c = alloc_stack $Butt

  checked_cast_addr_br take_always NSCloud in %b : $*NSCloud to Butt in %c : $*Butt, bb1, bb2

bb1:
  br bb3

bb2:
  br bb3

bb3:
  dealloc_stack %c : $*Butt
  dealloc_stack %b : $*NSCloud
  return undef : $()
}

sil @checked_cast_value_to_object : $@convention(thin) () -> () {
entry:
  %b = alloc_stack $NSCloud
  %c = alloc_stack $Butt

  checked_cast_addr_br take_always Butt in %c : $*Butt to NSCloud in %b : $*NSCloud, bb1, bb2

bb1:
  br bb3

bb2:
  br bb3

bb3:
  dealloc_stack %c : $*Butt
  dealloc_stack %b : $*NSCloud
  return undef : $()
}

// CHECK-LABEL: sil @inline_into_here
// CHECK:         checked_cast_addr_br take_always NSCloud in {{%.*}} : $*NSCloud to Butt in {{%.*}} : $*Butt
// CHECK:         checked_cast_addr_br take_always Butt in {{%.*}} : $*Butt to NSCloud in {{%.*}} : $*NSCloud
sil @inline_into_here : $@convention(thin) () -> () {
entry:
  %f = function_ref @checked_cast_object_to_value : $@convention(thin) () -> ()
  %y = apply %f() : $@convention(thin) () -> ()
  %g = function_ref @checked_cast_value_to_object : $@convention(thin) () -> ()
  %z = apply %g() : $@convention(thin) () -> ()
  return %z : $()
}
