forked from swiftlang/swift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpolymorphic_function.sil
24 lines (20 loc) · 1.04 KB
/
polymorphic_function.sil
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil %s | %FileCheck %s
import Swift
public protocol mmOutputStreamType {
/// Append the given `string` to this stream.
mutating func write(string: String)
}
public protocol mmStreamable {
func writeTo<Target : mmOutputStreamType>(target: inout Target)
}
// CHECK-LABEL: sil @test : $@convention(thin) () -> () {
sil @test : $() -> () {
bb0:
%281 = alloc_stack $mmStreamable
%282 = open_existential_addr mutable_access %281 : $*mmStreamable to $*@opened("01234567-89ab-cdef-0123-000000000000") mmStreamable
// CHECK: witness_method $@opened({{.*}}) mmStreamable, #mmStreamable.writeTo!1
%293 = witness_method $@opened("01234567-89ab-cdef-0123-000000000000") mmStreamable, #mmStreamable.writeTo!1, %282 : $*@opened("01234567-89ab-cdef-0123-000000000000") mmStreamable : $@convention(witness_method) @callee_owned <T_0_0, T_1_0 where T_0_0 : mmStreamable, T_1_0 : mmOutputStreamType> (@inout T_1_0, @inout T_0_0) -> ()
dealloc_stack %281 : $*mmStreamable
%1 = tuple ()
return %1 : $()
}