blob: 804e5548ac12a3727222b1a59d46c364625c8788 [file] [log] [blame]
// 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!1
mutating func performFoo() {
foo()
}
}
protocol HasNonMutatingMethod: HasMutatingMethod {
func foo()
}
extension HasNonMutatingMethod {
// CHECK-LABEL: sil hidden [ossa] @$s4main20HasNonMutatingMethodPAAE10performFooyyF :
// CHECK: witness_method $Self, #HasNonMutatingMethod.foo!1 :
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.1 :
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.1 :
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.1 :
func readFromFoo() -> Int {
return foo
}
// CHECK-LABEL: sil hidden [ossa] @$s4main22HasMutatingSetterClonePAAE10writeToFooyySiF :
// CHECK: witness_method $Self, #HasMutatingSetter.foo!setter.1 :
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.1 :
func readFromFoo() -> Int {
return foo
}
// CHECK-LABEL: sil hidden [ossa] @$s4main20HasNonMutatingSetterPAAE10writeToFooyySiF :
// CHECK: witness_method $Self, #HasNonMutatingSetter.foo!setter.1 :
func writeToFoo(_ x: Int) {
foo = x
}
}