mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-02 22:02:51 +01:00
It is possible to construct a symbolic impl lookup query that, when evaluated against a specific, will have a self type that is: - A facet value instruction with a symbolic constant value - That constant value is rewritten to a FacetValue pointing through a FacetAccessType to a symbolic facet value. 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