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-10Lines changed: 10 additions & 10 deletions
Original file line number
Diff line number
Diff line change
@@ -41,14 +41,14 @@ struct BaseStruct {
41
41
varunavailableSetter:Value{
42
42
get{.defaultValue }
43
43
@available(*, unavailable)
44
-
set{fatalError()} // expected-note 16 {{setter for 'unavailableSetter' has been explicitly marked unavailable here}}
44
+
set{fatalError()} // expected-note 12 {{setter for 'unavailableSetter' has been explicitly marked unavailable here}}
45
45
}
46
46
47
47
varunavailableGetterAndSetter:Value{
48
48
@available(*, unavailable)
49
49
get{fatalError()} // expected-note 24 {{getter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
50
50
@available(*, unavailable)
51
-
set{fatalError()} // expected-note 16 {{setter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
51
+
set{fatalError()} // expected-note 12 {{setter for 'unavailableGetterAndSetter' has been explicitly marked unavailable here}}
52
52
}
53
53
}
54
54
@@ -73,13 +73,13 @@ func testRValueLoads() {
73
73
74
74
_ = x.unavailableSetter
75
75
_ = x.unavailableSetter.a
76
-
_ = x.unavailableSetter[0] // expected-error {{setter for 'unavailableSetter' is unavailable}} FIXME: setter should not be diagnosed
77
-
_ = x.unavailableSetter[0].b // expected-error {{setter for 'unavailableSetter' is unavailable}} FIXME: setter should not be diagnosed
76
+
_ = x.unavailableSetter[0]
77
+
_ = x.unavailableSetter[0].b
78
78
79
79
_ = x.unavailableGetterAndSetter // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
80
80
_ = x.unavailableGetterAndSetter.a // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
81
-
_ = x.unavailableGetterAndSetter[0] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}} FIXME: setter should not be diagnosed
82
-
_ = x.unavailableGetterAndSetter[0].b // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}} FIXME: setter should not be diagnosed
81
+
_ = x.unavailableGetterAndSetter[0] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
82
+
_ = x.unavailableGetterAndSetter[0].b // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
varunavailableSetter_0= global.unavailableSetter[0] // expected-error {{setter for 'unavailableSetter' is unavailable}} FIXME: setter should not be diagnosed
247
-
varunavailableSetter_0_b= global.unavailableSetter[0].b // expected-error {{setter for 'unavailableSetter' is unavailable}}
varunavailableGetterAndSetter= global.unavailableGetterAndSetter // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
250
250
varunavailableGetterAndSetter_a= global.unavailableGetterAndSetter.a // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
251
-
varunavailableGetterAndSetter_0= global.unavailableGetterAndSetter[0] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}} FIXME: setter should not be diagnosed
252
-
varunavailableGetterAndSetter_0_b= global.unavailableGetterAndSetter[0].b // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}} expected-error {{setter for 'unavailableGetterAndSetter' is unavailable}} FIXME: setter should not be diagnosed
251
+
varunavailableGetterAndSetter_0= global.unavailableGetterAndSetter[0] // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
252
+
varunavailableGetterAndSetter_0_b= global.unavailableGetterAndSetter[0].b // expected-error {{getter for 'unavailableGetterAndSetter' is unavailable}}
0 commit comments