🍒[cxx-interop] Fix runtime crash when casting from an existential to a foreign reference type #78238
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: When a C++ foreign reference type is conformed to a Swift protocol via a Swift extension, trying to cast
any MyProtocol
to the foreign reference type crashes the runtime. This was becauseselectCasterForDest
wasn't handling C++ foreign reference types, and we were hittingswift_unreachable
.Scope: This changes the dynamic casting behavior for foreign reference types in the Swift runtime.
Risk: Low, this only changes a code path that is specific to foreign reference types.
Testing: Added compiler tests.
Issue: rdar://141227849
Reviewer: @mikeash @tbkka
Original PR: #78223