mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
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
78 lines
2.7 KiB
Plaintext
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
|
|
}
|