// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %s -emit-silgen | %FileCheck %s

// REQUIRES: objc_interop

sil_stage raw // CHECK: sil_stage raw

import Builtin
import Swift
import ObjectiveC

@objc protocol ObjCProto {}

// CHECK-LABEL: sil @protocol_conversion
sil @protocol_conversion : $@convention(thin) () -> @owned Protocol {
entry:
  // CHECK: {{%.*}} = objc_protocol #ObjCProto : $Protocol
  %p = objc_protocol #ObjCProto : $Protocol
  return %p : $Protocol
}

class SomeClass {}
protocol SomeClassProtocol : class {}

// CHECK-LABEL: sil [ossa] @metatype_to_object
// CHECK:         {{%.*}} = objc_metatype_to_object {{%.*}} : $@objc_metatype SomeClass.Type to $AnyObject
// CHECK:         {{%.*}} = objc_existential_metatype_to_object {{%.*}} : $@objc_metatype SomeClassProtocol.Type to $AnyObject
sil [ossa] @metatype_to_object : $@convention(thin) (@objc_metatype SomeClass.Type, @objc_metatype SomeClassProtocol.Type) -> @owned (AnyObject, AnyObject) {
entry(%a : $@objc_metatype SomeClass.Type, %b : $@objc_metatype SomeClassProtocol.Type):
  %x = objc_metatype_to_object %a : $@objc_metatype SomeClass.Type to $AnyObject
  %y = objc_existential_metatype_to_object %b : $@objc_metatype SomeClassProtocol.Type to $AnyObject
  %z = tuple (%x : $AnyObject, %y : $AnyObject)
  return %z : $(AnyObject, AnyObject)
}

sil @requires_any_object : $@convention(thin) <T: AnyObject> (@owned T) -> ()

sil [ossa] @foo : $@convention(thin) (@owned ObjCProto) -> () {
entry(%a : @owned $ObjCProto):
  %f = function_ref @requires_any_object : $@convention(thin) <T: AnyObject> (@owned T) -> ()
  %0 = apply %f<ObjCProto>(%a) : $@convention(thin) <T: AnyObject> (@owned T) -> ()
  return %0 : $()
}
