[5.0] [Runtime] Cache and unique based on protocol conformance descriptors, not witness tables #20774
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 conformance cache was caching the witness table for a conformance
T: P
, whereT
is a concrete type andP
is a protocol. However, itessentially picked one of potentially many witness tables for that
conformance, because retroactive conformances might produce different results
from different modules.
Make the conformance cache what is says it is: a cache of the conformance
descriptor for a given
T: P
. Clients of the conformance cache can choose how to interpretthe protocol conformance descriptor, e.g., by instantiating a witness table with a
particular set of arguments.
Moreover, unique metadata entries based on conformance descriptors, rather than witness tables.
This is both a correctness fix (when there are multiple, synthesized conformances in multiple modules)
and enables future optimizations (e.g., the use of pre-specialized witness tables).