Files
swift-mirror/test/decl/protocol/invalid_accessors_implementation.swift
Tim Kientzle 104dba920b [SE-0474] Implement yielding borrow and yielding mutate syntax
This does not rename all the internal variables, functions, and types
whose names were based on the old syntax.

I think it adds new syntax support everywhere it's needed while
retaining enough of the old syntax support that early adopters will
see nice deprecation messages guiding them to the new syntax.
2026-01-03 15:07:10 -08:00

50 lines
2.5 KiB
Swift

// RUN: %target-typecheck-verify-swift
//===---
// https://github.com/apple/swift/issues/56360
//===---
protocol Protocol1 {
var a: Int { get { 0 } } // expected-error {{protocol property getter cannot have a default implementation specified here; use extension instead}} expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}}
}
protocol Protocol2 {
var a: Int { set { a = 0 } } // expected-error {{protocol property setter cannot have a default implementation specified here; use extension instead}} expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}}
}
protocol Protocol3 {
var a: Int { get { 0 } set } // expected-error {{protocol property getter cannot have a default implementation specified here; use extension instead}} expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}}
}
protocol Protocol4 {
var a: Int { get { 0 } set { a = 0 } } // expected-error {{protocol property getter cannot have a default implementation specified here; use extension instead}} expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}}
}
protocol Protocol5 {
var a: Int { get set willSet { print("HI")} } // expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}} expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}}
}
protocol Protocol6 {
var a: Int { get { 0 } set willSet { print("HI")} } // expected-error {{protocol property getter cannot have a default implementation specified here; use extension instead}} expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}}
}
protocol Protocol7 {
var a: Int { set { print("HI") } willSet { print("HI") } } // expected-error {{protocol property setter cannot have a default implementation specified here; use extension instead}} expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}}
}
protocol Protocol8 {
var a: Int { set willSet { print("HI") } } // expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}} expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}}
}
protocol Protocol9 {
var a: Int { return 0 } // expected-error {{property in protocol must have explicit { get } or { get set } specifier}} expected-error {{expected 'get', 'yielding borrow', or 'set' in a protocol property}}
}
protocol Protocol10 {
}
// No error in extension
extension Protocol10 {
var a: Int { return 0 }
}