[Deserialization] Fix error when typealias required by protocol refers to type in @_implementationOnly module #37011
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.
In the added test case, the
typealias
refers to theHiddenStruct
type in the private module, which is imported as@_implementationOnly
. Because the import is@_implementationOnly
, during deserialization, we don’t import the private module and hence any reference to theHiddenStruct
type fails. In the common deserialization code path, this causes us to skip over thetypealias
member. However, when creating the protocol conformance, we assume that we can resolve the type to which thetypealias
refers and thus we are crashing.If
LangOpts.EnableDeserializationRecovery
is set totrue
, we should do our best to recover from such failures so this patch makes the deserialization failure handling more graceful and resolve the right-hand side of thetypealias
as anErrorType
.Fixes rdar://72891807