-
Notifications
You must be signed in to change notification settings - Fork 10.5k
Sema: Do not diagnose set accessor availability for InOutExpr
s inside of LoadExpr
s
#72369
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
tshortli
merged 4 commits into
swiftlang:main
from
tshortli:spurious-unavailable-setter-diagnostic
Mar 19, 2024
Merged
Sema: Do not diagnose set accessor availability for InOutExpr
s inside of LoadExpr
s
#72369
tshortli
merged 4 commits into
swiftlang:main
from
tshortli:spurious-unavailable-setter-diagnostic
Mar 19, 2024
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
kalebers
approved these changes
Mar 16, 2024
65eb40f
to
c1d29b2
Compare
@swift-ci please smoke test |
xedin
approved these changes
Mar 18, 2024
This test documents the current behavior of availability diagnostics for generalized accessors, including some bugs which have been called out as FIXMEs.
…de of `LoadExpr`s. 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
c1d29b2
to
5a23239
Compare
@swift-ci please smoke test |
This was referenced Mar 19, 2024
Merged
tshortli
added a commit
to tshortli/swift
that referenced
this pull request
Jun 25, 2024
This fixes a regression from swiftlang#72369. The compiler now incorrectly diagnoses use of an unavailable setter in this example: ``` func increaseBrightness(in window: UIWindow) { // warning: setter for 'screen' was deprecated in iOS 13.0 window.screen.brightness = 1.0 } ``` While the setter is deprecated, it would not going to be called in the generated code since `screen` is a reference type and there is no writeback through the setter for `screen` after setting `brightness`. Resolves rdar://129679658
tshortli
added a commit
to tshortli/swift
that referenced
this pull request
Jun 25, 2024
This fixes a regression from swiftlang#72369. The compiler now incorrectly diagnoses use of an unavailable setter in this example: ``` func increaseBrightness(in window: UIWindow) { // warning: setter for 'screen' was deprecated in iOS 13.0 window.screen.brightness = 1.0 } ``` While the setter is deprecated, it would not be called in the generated code since `screen` is a reference type and there is no writeback through the setter for `screen` after setting `brightness`. Resolves rdar://129679658
tshortli
added a commit
to tshortli/swift
that referenced
this pull request
Jun 27, 2024
This fixes a regression from swiftlang#72369. The compiler now incorrectly diagnoses use of an unavailable setter in this example: ``` func increaseBrightness(in window: UIWindow) { // warning: setter for 'screen' was deprecated in iOS 13.0 window.screen.brightness = 1.0 } ``` While the setter is deprecated, it would not be called in the generated code since `screen` is a reference type and there is no writeback through the setter for `screen` after setting `brightness`. Resolves rdar://129679658
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The recent deprecation of the set accessor for
CommandLine.arguments
exposed a bug in availability checking: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 forInOutExprs
, resulting in spurious availability warnings for read-only accesses of properties. The fix is to check whether there is an enclosingLoadExpr
in the AST and only diagnose the getter accessor in that case.Includes drive-by fixes for a couple warnings.
Resolves rdar://124566405