Skip to content

Commit 78112a6

Browse files
committed
Tests: Add tests exercising subscripts to availability_accessors.swift.
Some of the test cases demonstrate the issue reported in rdar://130487998.
1 parent e032c64 commit 78112a6

File tree

1 file changed

+41
-40
lines changed

1 file changed

+41
-40
lines changed

test/Sema/availability_accessors.swift

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,7 @@ struct Nested {
1111
}
1212
}
1313

14-
protocol ValueProto {
15-
static var defaultValue: Self { get }
16-
17-
var a: Nested { get set }
18-
19-
subscript(_ i: Int) -> Nested { get set }
20-
21-
@discardableResult mutating func setToZero() -> Int
22-
}
23-
24-
struct StructValue: ValueProto {
14+
struct StructValue {
2515
static var defaultValue: Self { .init(a: Nested(b: 1)) }
2616

2717
var a: Nested
@@ -39,9 +29,7 @@ struct StructValue: ValueProto {
3929
}
4030
}
4131

42-
class ClassValue: ValueProto {
43-
static var defaultValue: Self { .init(a: Nested(b: 1)) }
44-
32+
class ClassValue {
4533
var a: Nested
4634

4735
required init(a: Nested) {
@@ -60,26 +48,29 @@ class ClassValue: ValueProto {
6048
}
6149
}
6250

63-
struct BaseStruct<T: ValueProto> {
64-
var available: T = .defaultValue
51+
struct BaseStruct<T> {
52+
var available: T {
53+
get { fatalError() }
54+
set { }
55+
}
6556

6657
var unavailableGetter: T {
6758
@available(*, unavailable)
68-
get { fatalError() } // expected-note 63 {{getter for 'unavailableGetter' has been explicitly marked unavailable here}}
59+
get { fatalError() } // expected-note 65 {{getter for 'unavailableGetter' has been explicitly marked unavailable here}}
6960
set {}
7061
}
7162

7263
var unavailableSetter: T {
73-
get { .defaultValue }
64+
get { fatalError() }
7465
@available(*, unavailable)
75-
set { fatalError() } // expected-note 38 {{setter for 'unavailableSetter' has been explicitly marked unavailable here}}
66+
set { fatalError() } // expected-note 39 {{setter for 'unavailableSetter' has been explicitly marked unavailable here}}
7667
}
7768

7869
var unavailableGetterAndSetter: T {
7970
@available(*, unavailable)
80-
get { fatalError() } // expected-note 63 {{getter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
71+
get { fatalError() } // expected-note 65 {{getter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
8172
@available(*, unavailable)
82-
set { fatalError() } // expected-note 38 {{setter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
73+
set { fatalError() } // expected-note 39 {{setter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
8374
}
8475
}
8576

@@ -212,28 +203,38 @@ func testLValueAssignments_Class(_ someValue: ClassValue) {
212203
}
213204

214205
func testSubscripts(_ s: BaseStruct<StructValue>) {
215-
var x = SubscriptHelper()
206+
var x = BaseStruct<SubscriptHelper>()
216207

217-
x[available: s.available] = ()
218-
x[available: s.unavailableGetter] = () // FIXME: missing diagnostic for getter
208+
// Available subscript, available member, varying argument availability
209+
x.available[available: s.available] = ()
210+
x.available[available: s.unavailableGetter] = () // FIXME: missing diagnostic for getter
219211
// FIXME: spurious diagnostic for setter
220-
x[available: s.unavailableSetter] = () // expected-error {{setter for 'unavailableSetter' is unavailable}}
212+
x.available[available: s.unavailableSetter] = () // expected-error {{setter for 'unavailableSetter' is unavailable}}
221213
// FIXME: spurious diagnostic for setter
222-
x[available: s.unavailableGetterAndSetter] = () // expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
223-
224-
_ = x[available: s.available]
225-
_ = x[available: s.unavailableGetter] // expected-error {{getter for 'unavailableGetter' is unavailable}}
226-
_ = x[available: s.unavailableSetter]
227-
_ = x[available: s.unavailableGetterAndSetter] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
228-
229-
x[unavailableGetter: s.available] = ()
230-
_ = x[unavailableGetter: s.available] // expected-error {{getter for 'subscript(unavailableGetter:)' is unavailable}}
231-
232-
x[unavailableSetter: s.available] = () // expected-error {{setter for 'subscript(unavailableSetter:)' is unavailable}}
233-
_ = x[unavailableSetter: s.available]
234-
235-
x[unavailableGetterAndSetter: s.available] = () // expected-error {{setter for 'subscript(unavailableGetterAndSetter:)' is unavailable}}
236-
_ = x[unavailableGetterAndSetter: s.available] // expected-error {{getter for 'subscript(unavailableGetterAndSetter:)' is unavailable}}
214+
x.available[available: s.unavailableGetterAndSetter] = () // expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
215+
216+
_ = x.available[available: s.available]
217+
_ = x.available[available: s.unavailableGetter] // expected-error {{getter for 'unavailableGetter' is unavailable}}
218+
_ = x.available[available: s.unavailableSetter]
219+
_ = x.available[available: s.unavailableGetterAndSetter] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
220+
221+
// Varying subscript availability, available member, available argument
222+
x.available[unavailableGetter: s.available] = ()
223+
x.available[unavailableSetter: s.available] = () // expected-error {{setter for 'subscript(unavailableSetter:)' is unavailable}}
224+
x.available[unavailableGetterAndSetter: s.available] = () // expected-error {{setter for 'subscript(unavailableGetterAndSetter:)' is unavailable}}
225+
226+
_ = x.available[unavailableGetter: s.available] // expected-error {{getter for 'subscript(unavailableGetter:)' is unavailable}}
227+
_ = x.available[unavailableSetter: s.available]
228+
_ = x.available[unavailableGetterAndSetter: s.available] // expected-error {{getter for 'subscript(unavailableGetterAndSetter:)' is unavailable}}
229+
230+
// Available subscript, varying member availability, available argument
231+
x.unavailableGetter[available: s.available] = () // expected-error {{getter for 'unavailableGetter' is unavailable}}
232+
x.unavailableSetter[available: s.available] = () // expected-error {{setter for 'unavailableSetter' is unavailable}}
233+
x.unavailableGetterAndSetter[available: s.available] = () // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
234+
235+
_ = x.unavailableGetter[available: s.available] // expected-error {{getter for 'unavailableGetter' is unavailable}}
236+
_ = x.unavailableSetter[available: s.available]
237+
_ = x.unavailableGetterAndSetter[available: s.available] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
237238
}
238239

239240
func testDiscardedKeyPathLoads_Struct() {

0 commit comments

Comments
 (0)