Fix issue in match parameter type that depend on an associatedtype. #7707
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.
Closes #7451.
Given:
The default declref to
Impl.eval.Dx.InputType
isLookupDeclRef(InputType, Dx, witness = DeclaredSubtypeWitness(declRef = DirectDeclRef(Impl.eval.Dx_is_IDataTrait))
.However when we try to match the implementation signature to interface signature, we will form a declref to
IBar.eval.Di
using substitionDi = Dx
,witness(Di:IDataTrait) = DeclaredSubtypeWitness(MemberDeclRef(GenericAppDeclRef(Impl.eval,DeclRefType(Dx)), Dx_is_IDataTrait)
, causing the pointer identity of the specialized declref to mismatch.The fix is to exclude any default substitutions when forming a declref to the declared witness in the generic signature matching step.