1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
// RUN: %target-sil-opt %s -module-name=witness_tables -enable-library-evolution | %target-sil-opt -module-name=witness_tables -enable-library-evolution | %FileCheck %s
// RUN: %target-sil-opt %s -module-name=witness_tables -enable-library-evolution -O | %FileCheck %s
sil_stage raw
public protocol Proto {}
public struct Wrapper<T>: Proto { }
public protocol ResilientProtocol {
associatedtype T : Proto = Wrapper<Self>
func noDefaultA()
func noDefaultB()
func defaultC()
func defaultD()
func defaultE()
}
// CHECK-LABEL: sil {{.*}}@defaultC : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> ()
sil @defaultC : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> () {
bb0(%0 : $*Self):
%result = tuple ()
return %result : $()
}
// CHECK-LABEL: sil {{.*}}@defaultD : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> ()
sil @defaultD : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> () {
bb0(%0 : $*Self):
%result = tuple ()
return %result : $()
}
// CHECK-LABEL: sil @defaultE
sil public_external @defaultE : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> ()
protocol InternalProtocol {
func defaultF()
}
// CHECK-LABEL: sil hidden {{.*}}@defaultF
sil hidden @defaultF : $@convention(witness_method: InternalProtocol) <Self where Self : InternalProtocol> (@in_guaranteed Self) -> () {
bb0(%0 : $*Self):
%result = tuple ()
return %result : $()
}
// CHECK-LABEL: sil_default_witness_table ResilientProtocol {
// CHECK: associated_type_protocol (T: Proto): Wrapper<Self>: specialize <Self> (<T> Wrapper<T>: Proto module witness_tables)
// CHECK: associated_type T: Wrapper<Self>
// CHECK: no_default
// CHECK: no_default
// CHECK: method #ResilientProtocol.defaultC: {{.*}} : @defaultC
// CHECK: method #ResilientProtocol.defaultD: {{.*}} : @defaultD
// CHECK: method #ResilientProtocol.defaultE: {{.*}} : @defaultE
// CHECK: }
sil_default_witness_table ResilientProtocol {
associated_type_protocol (T: Proto): Wrapper<Self>: specialize <Self> (<T> Wrapper<T>: Proto module witness_tables)
associated_type T: Wrapper<Self>
no_default
no_default
method #ResilientProtocol.defaultC: @defaultC
method #ResilientProtocol.defaultD: @defaultD
method #ResilientProtocol.defaultE: @defaultE
}
// CHECK-LABEL: sil_default_witness_table hidden InternalProtocol {
// CHECK: method #InternalProtocol.defaultF: {{.*}} : @defaultF
// CHECK: }
sil_default_witness_table hidden InternalProtocol {
method #InternalProtocol.defaultF: @defaultF
}
|