// 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 @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 @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) (@owned T) -> () sil @foo : $@convention(thin) (@owned ObjCProto) -> () { entry(%a : $ObjCProto): %f = function_ref @requires_any_object : $@convention(thin) (@owned T) -> () %0 = apply %f(%a) : $@convention(thin) (@owned T) -> () return %0 : $() }