| // 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) <T: AnyObject> (@owned T) -> () |
| |
| sil @foo : $@convention(thin) (@owned ObjCProto) -> () { |
| entry(%a : $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 : $() |
| } |