mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
These are tests that fail in the next commit without this flag. This does not add -verify-ignore-unrelated to all tests with -verify, only the ones that would fail without it. This is NFC since this flag is currently a no-op.
356 lines
11 KiB
Swift
356 lines
11 KiB
Swift
// RUN: %target-typecheck-verify-swift -verify-ignore-unrelated \
|
|
// RUN: -verify-additional-prefix enabled- \
|
|
// RUN: -enable-experimental-feature CoroutineAccessors \
|
|
// RUN: -debug-diagnostic-names
|
|
// RUN: %target-typecheck-verify-swift -verify-ignore-unrelated \
|
|
// RUN: -verify-additional-prefix disabled- \
|
|
// RUN: -debug-diagnostic-names
|
|
|
|
// REQUIRES: swift_feature_CoroutineAccessors
|
|
|
|
var _i: Int = 0
|
|
|
|
// Order of accessor kinds:
|
|
// readers:
|
|
// - get
|
|
// - unsafeAddress
|
|
// - _read
|
|
// - read
|
|
// writers:
|
|
// - set
|
|
// - unsafeMutableAddress
|
|
// - _modify
|
|
// - modify
|
|
|
|
// =============================================================================
|
|
// Two reads
|
|
// =============================================================================
|
|
|
|
// enabled: conflicting accessors
|
|
// disabled: implicit getter.
|
|
var ir_r: Int {
|
|
read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
// expected-enabled-error@-1{{variable cannot provide both a 'read' accessor and a '_read' accessor}}
|
|
fatalError()
|
|
}
|
|
_read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
// expected-enabled-note@-1{{previous_accessor}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: conflicting accessors
|
|
var igr: Int {
|
|
get {
|
|
1
|
|
}
|
|
read { // expected-error{{variable cannot provide both a 'read' accessor and a getter}}
|
|
// expected-note@-4{{previous_accessor}}
|
|
// expected-disabled-error@-2{{'read' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
yield _i
|
|
}
|
|
}
|
|
|
|
// =============================================================================
|
|
// One read, one write.
|
|
// =============================================================================
|
|
|
|
// enabled: ok
|
|
// disabled: bad keyword
|
|
var igm: Int {
|
|
get {
|
|
0
|
|
}
|
|
modify { // expected-disabled-error{{'modify' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
yield &_i
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: implicit getter
|
|
var img: Int {
|
|
modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
get { // expected-disabled-error{{cannot_find_in_scope}}
|
|
0
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: bad keyword
|
|
var iuam: Int {
|
|
unsafeAddress {
|
|
UnsafePointer<Int>(bitPattern: 0x0)!
|
|
}
|
|
modify { // expected-disabled-error{{'modify' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
yield &_i
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: bad keyword
|
|
var imua: Int {
|
|
modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
unsafeAddress { // expected-disabled-error{{cannot_find_in_scope}}
|
|
UnsafePointer<Int>(bitPattern: 0x0)!
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: bad keyword
|
|
var i_rm: Int {
|
|
_read {
|
|
yield _i
|
|
}
|
|
modify { // expected-disabled-error{{'modify' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
yield &_i
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: implicit getter.
|
|
var im_r: Int {
|
|
modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
_read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: implicit getter
|
|
var irm: Int {
|
|
read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: implicit getter.
|
|
var imr: Int {
|
|
modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: implicit getter
|
|
var irs: Int {
|
|
read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
set { // expected-disabled-error{{cannot_find_in_scope}}
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: bad keyword
|
|
var isr: Int {
|
|
set {
|
|
}
|
|
read { // expected-disabled-error{{'read' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: implicit getter.
|
|
var iruma: Int {
|
|
read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
unsafeMutableAddress { // expected-disabled-error{{cannot_find_in_scope}}
|
|
UnsafeMutablePointer<Int>(bitPattern: 0x0)!
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: implicit getter.
|
|
var iumar: Int {
|
|
read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
unsafeMutableAddress { // expected-disabled-error{{cannot_find_in_scope}}
|
|
UnsafeMutablePointer<Int>(bitPattern: 0x0)!
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: implicit getter
|
|
var ir_m: Int {
|
|
read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
_modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: bad keyword
|
|
var i_mr: Int {
|
|
_modify {
|
|
fatalError()
|
|
}
|
|
read { // expected-disabled-error{{'read' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// =============================================================================
|
|
// Multiple mutating only.
|
|
// =============================================================================
|
|
|
|
// enabled: need a reader.
|
|
// disabled: implicit getter.
|
|
var ims: Int {
|
|
modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
set { // expected-enabled-error{{variable with a setter must also have a getter, addressor, or 'read' accessor}}
|
|
// expected-disabled-error@-1{{cannot_find_in_scope}}
|
|
}
|
|
}
|
|
|
|
// enabled: need a reader
|
|
// disabled: bad keyword
|
|
var ism: Int {
|
|
set { // expected-error{{variable with a setter must also have a getter, addressor, or 'read' accessor}}
|
|
fatalError()
|
|
}
|
|
modify {// expected-disabled-error{{'modify' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: need a reader.
|
|
// disabled: implicit getter.
|
|
var imuma: Int {
|
|
modify { // expected-enabled-error{{variable with a 'modify' accessor must also have a getter, addressor, or 'read' accessor}}
|
|
// expected-disabled-error@-1{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
unsafeMutableAddress { // expected-disabled-error{{cannot_find_in_scope}}
|
|
UnsafeMutablePointer<Int>(bitPattern: 0x0)!
|
|
}
|
|
}
|
|
|
|
// enabled: need a reader
|
|
// disabled: bad keyword
|
|
var iumam: Int {
|
|
unsafeMutableAddress {
|
|
fatalError()
|
|
}
|
|
modify { // expected-error{{variable with a 'modify' accessor must also have a getter, addressor, or 'read' accessor}}
|
|
// expected-disabled-error@-1{{'modify' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: conflicting accessors. need a reader.
|
|
// disabled: implicit getter.
|
|
var im_m: Int {
|
|
modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
// expected-enabled-error@-1{{variable cannot provide both a 'modify' accessor and a '_modify' accessor}}
|
|
fatalError()
|
|
}
|
|
_modify { // expected-enabled-error{{variable with a '_modify' accessor must also have a getter, addressor, or 'read' accessor}}
|
|
// expected-disabled-error@-1{{cannot_find_in_scope}}
|
|
// expected-enabled-note@-2{{previous_accessor}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: need a reader.
|
|
// disabled: implicit getter.
|
|
var i_mm: Int {
|
|
_modify { // expected-enabled-error{{variable with a '_modify' accessor must also have a getter, addressor, or 'read' accessor}}
|
|
// expected-disabled-error@-1{{variable with a 'modify' accessor must also have a getter, addressor, or 'read' accessor}}
|
|
// expected-note@-2{{previous_accessor}}
|
|
fatalError()
|
|
}
|
|
modify { // expected-disabled-error{{'modify' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
// expected-error@-1{{variable cannot provide both a 'modify' accessor and a '_modify' accessor}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// enabled: need a reader.
|
|
// disabled: implicit getter.
|
|
var imm: Int {
|
|
modify { // expected-enabled-error{{variable with a 'modify' accessor must also have a getter, addressor, or 'read' accessor}}
|
|
// expected-disabled-error@-1{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
modify { // expected-enabled-error{{variable already has a 'modify' accessor}}
|
|
// expected-enabled-note@-5{{previous_accessor}}
|
|
// expected-disabled-error@-2{{cannot_find_in_scope}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// =============================================================================
|
|
// Multiple
|
|
// =============================================================================
|
|
|
|
// enabled: ok
|
|
// disabled: bad keyword
|
|
var i_rm_m: Int {
|
|
_read {
|
|
yield _i
|
|
}
|
|
modify { // expected-disabled-error{{'modify' accessor is only valid when experimental feature coroutine accessors is enabled}}
|
|
// expected-error@-1{{variable cannot provide both a 'modify' accessor and a '_modify' accessor}}
|
|
yield &_i
|
|
}
|
|
_modify { // expected-note{{previous_accessor}}
|
|
yield &_i
|
|
}
|
|
}
|
|
|
|
// enabled: ok
|
|
// disabled: implicit getter
|
|
var ir_rm_m: Int {
|
|
read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
// expected-enabled-error@-1{{variable cannot provide both a 'read' accessor and a '_read' accessor}}
|
|
fatalError()
|
|
}
|
|
_read { // expected-disabled-error{{cannot_find_in_scope}}
|
|
// expected-enabled-note@-1{{previous_accessor}}
|
|
fatalError()
|
|
}
|
|
modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
// expected-enabled-error@-1{{variable cannot provide both a 'modify' accessor and a '_modify' accessor}}
|
|
fatalError()
|
|
}
|
|
_modify { // expected-disabled-error{{cannot_find_in_scope}}
|
|
// expected-enabled-note@-1{{previous_accessor}}
|
|
fatalError()
|
|
}
|
|
}
|
|
|
|
// =============================================================================
|
|
// Protocol Requirements
|
|
// =============================================================================
|
|
|
|
protocol P {
|
|
var goodP: Int { read set } //expected-disabled-error{{property in protocol must have explicit { get } or { get set } specifier}}
|
|
//expected-disabled-error@-1{{expected get or set in a protocol property}}
|
|
var badP: Int { read modify } //expected-enabled-error{{expected get, read, or set in a protocol property}}
|
|
//expected-disabled-error@-1{{property in protocol must have explicit { get } or { get set } specifier}}
|
|
//expected-disabled-error@-2{{expected get or set in a protocol property}}
|
|
subscript(goodS goodS: Int) -> Int { read set } //expected-disabled-error{{expected get or set in a protocol property}}
|
|
subscript(badS badS: Int) -> Int { read modify } //expected-enabled-error{{expected get, read, or set in a protocol property}}
|
|
//expected-disabled-error@-1{{expected get or set in a protocol property}}
|
|
}
|