blob: da37ce12c49857f4839dd280eb1915eab02c358c [file] [log] [blame]
// RUN: %target-swift-frontend -emit-ir -verify -I %S/../IDE/Inputs/custom-modules %s
// REQUIRES: objc_interop
sil_stage canonical
import Builtin
import Swift
import ImportAsMember
sil @IAMStruct1CreateSimple : $@convention(c) () -> Struct1
sil @IAMStruct1Rotate : $@convention(c) (@in Struct1, Double) -> Struct1
sil @IAMStruct1SetAltitude : $@convention(c) (@inout Struct1, Double) -> ()
sil @mutateSomeState : $@convention(c) _0_0 where τ_0_0 : IAMProto> _0_0) -> ()
sil @invoke_methods : $@convention(thin) (Double) -> () {
entry(%z : $Double):
%a = function_ref @IAMStruct1CreateSimple : $@convention(c) () -> Struct1
%b = apply %a() : $@convention(c) () -> Struct1
%c = alloc_stack $Struct1
store %b to %c : $*Struct1
%d = function_ref @IAMStruct1Rotate : $@convention(c) (@in Struct1, Double) -> Struct1
%e = apply %d(%c, %z) : $@convention(c) (@in Struct1, Double) -> Struct1
%f = function_ref @IAMStruct1SetAltitude : $@convention(c) (@inout Struct1, Double) -> ()
apply %f(%c, %z) : $@convention(c) (@inout Struct1, Double) -> ()
dealloc_stack %c : $*Struct1
return undef : $()
}
// CHECK-LABEL: define void @invoke_protocol_methods(%objc_object*)
sil @invoke_protocol_methods : $@convention(thin) (IAMProto) -> () {
entry(%z : $IAMProto):
%a = open_existential_ref %z : $IAMProto to $@opened("01234567-89AB-CDEF-0123-000000000000") IAMProto
%b = function_ref @mutateSomeState : $@convention(c) _0_0 where τ_0_0 : IAMProto> _0_0) -> ()
// CHECK: [[CAST:%.*]] = bitcast %objc_object* %0 to i8*
// CHECK: call void @mutateSomeState(i8* [[CAST]])
apply %b<@opened("01234567-89AB-CDEF-0123-000000000000") IAMProto>(%a) : $@convention(c) _0_0 where τ_0_0 : IAMProto> _0_0) -> ()
return undef : $()
}