blob: 124619380e818069dcd8d34eeba18a73db6c595f [file] [log] [blame]
// 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!1: {{.*}} : @defaultC
// CHECK: method #ResilientProtocol.defaultD!1: {{.*}} : @defaultD
// CHECK: method #ResilientProtocol.defaultE!1: {{.*}} : @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!1: @defaultC
method #ResilientProtocol.defaultD!1: @defaultD
method #ResilientProtocol.defaultE!1: @defaultE
}
// CHECK-LABEL: sil_default_witness_table hidden InternalProtocol {
// CHECK: method #InternalProtocol.defaultF!1: {{.*}} : @defaultF
// CHECK: }
sil_default_witness_table hidden InternalProtocol {
method #InternalProtocol.defaultF!1: @defaultF
}