Handle FacetAccessType as the self type in symbolic impl lookups #5200
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.
It is possible to construct a symbolic impl lookup query that, when evaluated against a specific, will have a self type that is:
Impl lookup looks through the FacetValue to the type inside since FacetValue will reduce the number of interfaces available to match the minimum deduced requirements.
Impl lookup also unwraps FacetAccessType in the self type of the query and the impl, so that queries on FacetAccessType and on facet values can both compare against the impl's self type with a simple constant value equality check.
We were unwrapping FacetAccessType on the way into impl lookup, and then assumed that meant it would never be a FacetAccessType in the symbolic impl lookup instruction. However, as we can see, the query self instruction can be symbolic and its value can be rewritten. And in that case it can contain or become a FacetAccessType.
So we need to also unwrap the FacetAccessType when doing a symbolic impl lookup.
Closes #5187