Files
swift-mirror/test/IRGen/lowered_optional_self_metadata.sil
2022-09-01 06:35:57 +03:00

36 lines
1.3 KiB
Plaintext

// RUN: %target-swift-frontend -emit-ir %s
sil_stage canonical
import Swift
public protocol Protocol {
static func foo(_: Self?)
}
// https://github.com/apple/swift/issues/45611
// Ensure we pass the 'Self' type metadata for 'Optional' methods using the
// formal 'Optional' type and not a lowered SIL type.
// CHECK-LABEL: @_TMaGSqFT_T__
sil @optional_method : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
sil @call_optional_method_with_lowered_function : $@convention(thin) (@in_guaranteed Optional<@callee_guaranteed @substituted <T> () -> @out T for <()>>) -> () {
entry(%x : $*Optional<@callee_guaranteed @substituted <T> () -> @out T for <()>>):
%f = function_ref @optional_method : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
apply %f<() -> ()>(%x) : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
%p = partial_apply [callee_guaranteed] %f<() -> ()>() : $@convention(method) <T> (@in_guaranteed Optional<T>) -> ()
return undef : $()
}
// https://github.com/apple/swift/issues/46136
// Ensure we correctly emit metadata for layout for lowered 'Optional' types.
sil @alloc_stack_optional_with_generic : $@convention(thin) <T> () -> () {
%a = alloc_stack $*Optional<(T, @convention(thin) () -> ())>
dealloc_stack %a : $*Optional<(T, @convention(thin) () -> ())>
%t = tuple ()
return %t : $()
}