[6.2][silgen] Teach SILGen how to emit a forced dynamic member ref given nonisolated(nonsending) casts. #82082
+65
−1
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.
Explanation: This PR teaches SILGen how to emit a forced dynamic member ref given AST casts to nonisolated(nonsending) that occurs when emitting calls to objective-c methods through an AnyObject casted object. Specifically, I taught SILGen how to emit an AST like the following:
Since we are emitting an objc async function, there isn't an extra implicit parameter like if we were using a swift async function. So, I just reused code that was already used locally to look through these sorts of conversions. I just had to add to that code support for conversions that add nonisolated(nonsending). Previously it only supported looking through global actor conversions.
Scope: This changes how SILGen emits dynamic member given a cast in the AST which only occurs if a user casts an objective-c class to AnyObject and invokes the method. The implementation is similar to how we already handle casts to/form global actor so the change is not doing anything novel. It will not impact code that does not cast classes to AnyObject. So code that uses classes directly will not be impacted.
Resolves: rdar://152596823
Main PR: #82029
Risk: Low. This can only impact code that casts an imported objc class that is cast to an AnyObject and then whose methods are then invoked.
Testing: Added compiler tests
Reviewer: @rjmccall