mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
108 lines
3.4 KiB
Swift
108 lines
3.4 KiB
Swift
// 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
|
|
}
|
|
}
|