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: Do not diagnose set accessor availability for InOutExprs inside of LoadExprs.
The recent deprecation of the set accessor for `CommandLine.arguments` exposed
a bug in availability checking:
```
for arg in CommandLine.arguments[1...] {
╰─ warning: setter for 'arguments' is deprecated: ...
```
The parser generates an `InOutExpr` in the AST for the subscript access in the
code above and the availabilty checker was unconditionally diagnosing set
accessors for `InOutExprs`, resulting in spurious availability warnings for
read-only accesses of properties. The fix is to check whether there is an
enclosing `LoadExpr` in the AST and only diagnose the getter accessor in that
case.
Resolves rdar://124566405
Copy file name to clipboardExpand all lines: test/Sema/availability_accessors.swift
+10-14Lines changed: 10 additions & 14 deletions
Original file line number
Diff line number
Diff line change
@@ -35,14 +35,14 @@ struct BaseStruct {
35
35
varunavailableSetter:Value{
36
36
get{.defaultValue }
37
37
@available(*, unavailable)
38
-
set{fatalError()} // expected-note 9 {{setter for 'unavailableSetter' has been explicitly marked unavailable here}}
38
+
set{fatalError()} // expected-note 5 {{setter for 'unavailableSetter' has been explicitly marked unavailable here}}
39
39
}
40
40
41
41
varunavailableGetterAndSetter:Value{
42
42
@available(*, unavailable)
43
43
get{fatalError()} // expected-note 17 {{getter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
44
44
@available(*, unavailable)
45
-
set{fatalError()} // expected-note 11 {{setter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
45
+
set{fatalError()} // expected-note 7 {{setter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
46
46
}
47
47
}
48
48
@@ -63,15 +63,13 @@ func testRValueLoads() {
63
63
64
64
_ = x.unavailableSetter
65
65
_ = x.unavailableSetter.a
66
-
// FIXME: setter should not be diagnosed when loading through a subscript
67
-
_ = x.unavailableSetter[0] // expected-error {{setter for 'unavailableSetter' is unavailable}}
68
-
_ = x.unavailableSetter[0].b // expected-error {{setter for 'unavailableSetter' is unavailable}}
66
+
_ = x.unavailableSetter[0]
67
+
_ = x.unavailableSetter[0].b
69
68
70
69
_ = x.unavailableGetterAndSetter // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
71
70
_ = x.unavailableGetterAndSetter.a // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
72
-
// FIXME: setter should not be diagnosed when loading through a subscript
73
-
_ = x.unavailableGetterAndSetter[0] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
74
-
_ = x.unavailableGetterAndSetter[0].b // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
71
+
_ = x.unavailableGetterAndSetter[0] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
72
+
_ = x.unavailableGetterAndSetter[0].b // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
varunavailableGetterAndSetter= global.unavailableGetterAndSetter // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
157
154
varunavailableGetterAndSetter_a= global.unavailableGetterAndSetter.a // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
158
-
// FIXME: setter should not be diagnosed when loading through a subscript
159
-
varunavailableGetterAndSetter_0= global.unavailableGetterAndSetter[0] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
160
-
varunavailableGetterAndSetter_0_b= global.unavailableGetterAndSetter[0].b // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}}
155
+
varunavailableGetterAndSetter_0= global.unavailableGetterAndSetter[0] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
156
+
varunavailableGetterAndSetter_0_b= global.unavailableGetterAndSetter[0].b // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
0 commit comments