You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sema: Diagnose availability of storage accessors for key paths.
Fixes the missing diagnostic about the availability of the setter of `x` in the
following example:
```
struct S {
var x: Int {
get { 0 }
@available(*, unavailable) set {}
}
}
var s = S()
s[keyPath: \.x] = 1
```
Resolves rdar://124977727
_ =x[keyPath: \.unavailableGetter] // FIXME: missing diagnostic for getter
121
-
_ =x[keyPath: \.unavailableGetter.a] // FIXME: missing diagnostic for getter
122
-
_ =x[keyPath: \.unavailableGetter[0]] // FIXME: missing diagnostic for getter
123
-
_ =x[keyPath: \.unavailableGetter[0].b] // FIXME: missing diagnostic for getter
120
+
_ =x[keyPath: \.unavailableGetter] // expected-error {{getter for 'unavailableGetter' is unavailable}}
121
+
_ =x[keyPath: \.unavailableGetter.a] // expected-error {{getter for 'unavailableGetter' is unavailable}}
122
+
_ =x[keyPath: \.unavailableGetter[0]] // expected-error {{getter for 'unavailableGetter' is unavailable}}
123
+
_ =x[keyPath: \.unavailableGetter[0].b] // expected-error {{getter for 'unavailableGetter' is unavailable}}
124
124
_ =a[keyPath: \.[takesIntInOut(&x.unavailableGetter.a.b)]] // expected-error {{getter for 'unavailableGetter' is unavailable}}
125
125
_ =a[keyPath: \.[takesIntInOut(&x.unavailableGetter[0].b)]] // expected-error {{getter for 'unavailableGetter' is unavailable}}
126
126
@@ -131,10 +131,10 @@ func testKeyPathLoads() {
131
131
_ =a[keyPath: \.[takesIntInOut(&x.unavailableSetter.a.b)]] // FIXME: missing diagnostic for setter
132
132
_ =a[keyPath: \.[takesIntInOut(&x.unavailableSetter[0].b)]] // expected-error {{setter for 'unavailableSetter' is unavailable}}
133
133
134
-
_ =x[keyPath: \.unavailableGetterAndSetter] // FIXME: missing diagnostic for getter
135
-
_ =x[keyPath: \.unavailableGetterAndSetter.a] // FIXME: missing diagnostic for getter
136
-
_ =x[keyPath: \.unavailableGetterAndSetter[0]] // FIXME: missing diagnostic for getter
137
-
_ =x[keyPath: \.unavailableGetterAndSetter[0].b] // FIXME: missing diagnostic for getter
134
+
_ =x[keyPath: \.unavailableGetterAndSetter] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
135
+
_ =x[keyPath: \.unavailableGetterAndSetter.a] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
136
+
_ =x[keyPath: \.unavailableGetterAndSetter[0]] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
137
+
_ =x[keyPath: \.unavailableGetterAndSetter[0].b] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
138
138
_ =a[keyPath: \.[takesIntInOut(&x.unavailableGetterAndSetter.a.b)]] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} FIXME: missing diagnostic for setter
139
139
_ =a[keyPath: \.[takesIntInOut(&x.unavailableGetterAndSetter[0].b)]] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
x[keyPath: \.unavailableGetterAndSetter.a]= someValue.a // FIXME: missing diagnostics for getter and setter
170
-
x[keyPath: \.unavailableGetterAndSetter[0]]= someValue.a // FIXME: missing diagnostics for getter and setter
171
-
x[keyPath: \.unavailableGetterAndSetter[0].b]=1 // FIXME: missing diagnostics for getter and setter
168
+
x[keyPath: \.unavailableGetterAndSetter]= someValue // expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
169
+
x[keyPath: \.unavailableGetterAndSetter.a]= someValue.a // expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
170
+
x[keyPath: \.unavailableGetterAndSetter[0]]= someValue.a // expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
171
+
x[keyPath: \.unavailableGetterAndSetter[0].b]=1 // expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
172
172
a[keyPath: \.[takesIntInOut(&x.unavailableGetterAndSetter.a.b)]]=0 // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} FIXME: missing diagnostic for setter
173
173
a[keyPath: \.[takesIntInOut(&x.unavailableGetterAndSetter[0].b)]]=0 // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
0 commit comments