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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
// RUN: %target-swift-emit-silgen -module-name main %s | %FileCheck %s
// rdar://47470420
/*****************************************************************************/
/* Methods *******************************************************************/
/*****************************************************************************/
protocol HasMutatingMethod {
mutating func foo()
}
protocol HasMutatingMethodClone: HasMutatingMethod {
mutating func foo()
}
extension HasMutatingMethodClone {
// CHECK-LABEL: sil hidden [ossa] @$s4main22HasMutatingMethodClonePAAE10performFooyyF :
// CHECK: witness_method $Self, #HasMutatingMethod.foo :
mutating func performFoo() {
foo()
}
}
protocol HasNonMutatingMethod: HasMutatingMethod {
func foo()
}
extension HasNonMutatingMethod {
// CHECK-LABEL: sil hidden [ossa] @$s4main20HasNonMutatingMethodPAAE10performFooyyF :
// CHECK: witness_method $Self, #HasNonMutatingMethod.foo :
func performFoo() {
foo()
}
}
/*****************************************************************************/
/* Getters *******************************************************************/
/*****************************************************************************/
protocol HasMutatingGetter {
var foo: Int { mutating get }
}
protocol HasMutatingGetterClone: HasMutatingGetter {
var foo: Int { mutating get }
}
extension HasMutatingGetterClone {
// CHECK-LABEL: sil hidden [ossa] @$s4main22HasMutatingGetterClonePAAE11readFromFooSiyF :
// CHECK: witness_method $Self, #HasMutatingGetter.foo!getter :
mutating func readFromFoo() -> Int {
return foo
}
}
protocol HasNonMutatingGetter: HasMutatingGetter {
var foo: Int { get }
}
extension HasNonMutatingGetter {
// CHECK-LABEL: sil hidden [ossa] @$s4main20HasNonMutatingGetterPAAE11readFromFooSiyF :
// CHECK: witness_method $Self, #HasNonMutatingGetter.foo!getter :
func readFromFoo() -> Int {
return foo
}
}
/*****************************************************************************/
/* Setters *******************************************************************/
/*****************************************************************************/
protocol HasMutatingSetter {
var foo: Int { get set }
}
protocol HasMutatingSetterClone: HasMutatingSetter {
var foo: Int { get set }
}
extension HasMutatingSetterClone {
// CHECK-LABEL: sil hidden [ossa] @$s4main22HasMutatingSetterClonePAAE11readFromFooSiyF :
// CHECK: witness_method $Self, #HasMutatingSetter.foo!getter :
func readFromFoo() -> Int {
return foo
}
// CHECK-LABEL: sil hidden [ossa] @$s4main22HasMutatingSetterClonePAAE10writeToFooyySiF :
// CHECK: witness_method $Self, #HasMutatingSetter.foo!setter :
mutating func writeToFoo(_ x: Int) {
foo = x
}
}
protocol HasNonMutatingSetter: HasMutatingSetter {
var foo: Int { get nonmutating set }
}
extension HasNonMutatingSetter {
// It's unfortunate that this uses a new witness table entry,
// but we can live with it.
// CHECK-LABEL: sil hidden [ossa] @$s4main20HasNonMutatingSetterPAAE11readFromFooSiyF :
// CHECK: witness_method $Self, #HasNonMutatingSetter.foo!getter :
func readFromFoo() -> Int {
return foo
}
// CHECK-LABEL: sil hidden [ossa] @$s4main20HasNonMutatingSetterPAAE10writeToFooyySiF :
// CHECK: witness_method $Self, #HasNonMutatingSetter.foo!setter :
func writeToFoo(_ x: Int) {
foo = x
}
}
|