Files
swift-mirror/test/SIL/Parser/default_witness_tables.sil
Erik Eckstein eea471fe99 add the ComputeEffects pass
The ComputeEffects pass derives escape information for function arguments and adds those effects in the function.
This needs a lot of changes in check-lines in the tests, because the effects are printed in SIL
2022-04-22 09:50:07 +02:00

78 lines
2.7 KiB
Plaintext

// 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
}