@@ -65,24 +65,51 @@ struct BaseStruct<T: ValueProto> {
65
65
66
66
var unavailableGetter : T {
67
67
@available ( * , unavailable)
68
- get { fatalError ( ) } // expected-note 62 {{getter for 'unavailableGetter' has been explicitly marked unavailable here}}
68
+ get { fatalError ( ) } // expected-note 63 {{getter for 'unavailableGetter' has been explicitly marked unavailable here}}
69
69
set { }
70
70
}
71
71
72
72
var unavailableSetter : T {
73
73
get { . defaultValue }
74
74
@available ( * , unavailable)
75
- set { fatalError ( ) } // expected-note 37 {{setter for 'unavailableSetter' has been explicitly marked unavailable here}}
75
+ set { fatalError ( ) } // expected-note 38 {{setter for 'unavailableSetter' has been explicitly marked unavailable here}}
76
76
}
77
77
78
78
var unavailableGetterAndSetter : T {
79
79
@available ( * , unavailable)
80
- get { fatalError ( ) } // expected-note 62 {{getter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
80
+ get { fatalError ( ) } // expected-note 63 {{getter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
81
81
@available ( * , unavailable)
82
- set { fatalError ( ) } // expected-note 37 {{setter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
82
+ set { fatalError ( ) } // expected-note 38 {{setter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
83
83
}
84
84
}
85
85
86
+ struct SubscriptHelper {
87
+ subscript< T> ( available t: T ) -> ( ) {
88
+ get { }
89
+ set { }
90
+ }
91
+
92
+ subscript< T> ( unavailableGetter t: T ) -> ( ) {
93
+ @available ( * , unavailable)
94
+ get { } // expected-note {{getter for 'subscript(unavailableGetter:)' has been explicitly marked unavailable here}}
95
+ set { }
96
+ }
97
+
98
+ subscript< T> ( unavailableSetter t: T ) -> ( ) {
99
+ get { }
100
+ @available ( * , unavailable)
101
+ set { } // expected-note {{setter for 'subscript(unavailableSetter:)' has been explicitly marked unavailable here}}
102
+ }
103
+
104
+ subscript< T> ( unavailableGetterAndSetter t: T ) -> ( ) {
105
+ @available ( * , unavailable)
106
+ get { } // expected-note {{getter for 'subscript(unavailableGetterAndSetter:)' has been explicitly marked unavailable here}}
107
+ @available ( * , unavailable)
108
+ set { } // expected-note {{setter for 'subscript(unavailableGetterAndSetter:)' has been explicitly marked unavailable here}}
109
+ }
110
+
111
+ }
112
+
86
113
@discardableResult func takesInOut< T> ( _ t: inout T ) -> T {
87
114
return t
88
115
}
@@ -184,6 +211,31 @@ func testLValueAssignments_Class(_ someValue: ClassValue) {
184
211
x. unavailableGetterAndSetter [ 0 ] . b = 1 // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
185
212
}
186
213
214
+ func testSubscripts( _ s: BaseStruct < StructValue > ) {
215
+ var x = SubscriptHelper ( )
216
+
217
+ x [ available: s. available] = ( )
218
+ x [ available: s. unavailableGetter] = ( ) // FIXME: missing diagnostic for getter
219
+ // FIXME: spurious diagnostic for setter
220
+ x [ available: s. unavailableSetter] = ( ) // expected-error {{setter for 'unavailableSetter' is unavailable}}
221
+ // 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}}
237
+ }
238
+
187
239
func testDiscardedKeyPathLoads_Struct( ) {
188
240
let a = [ 0 ]
189
241
var x = BaseStruct < StructValue > ( )
0 commit comments