🍒[cxx-interop] C++ reference types are not AnyObject
s
#76720
Merged
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: C++ foreign reference types have custom reference counting mechanisms, so they cannot conform to
AnyObject
. Currently Swift's type system treats C++ FRTs asAnyObject
s on non-Darwin platforms, which is incorrect. This change makes sure the behavior is consistent with Darwin platform, i.e. a cast of C++ FRT toAnyObject
is rejected by the typechecker.Scope: Makes sure the special typechecker rule for FRTs is applied when Obj-C interop is disabled.
Risk: Low, only takes effect when Obj-C interop is disabled, and FRTs are used.
Testing: Enabled an existing compiler test on Linux and Windows.
Issue: rdar://136664617
Reviewer: @Xazax-hun
Original PR: #74185