[release/8.0-staging] Fix polluted CompareState when comparing element types in a signature #98249
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.
Backport of #98198 to release/8.0-staging
We were propagating state from each type in the method signature to the comparisons for the next type. This resulted in type equivalence checks being disabled for any parameters that came after a generic parameter.
Customer Impact
Fixes #96268
MissingMethodException
would be thrown when trying to call a method that had a generic parameter or return value followed by a parameter that relied on type equivalence and came from different assemblies. Interop types are the very common use case here. There is no workaround other than reverting to 7.0 or rewriting method signatures to not have generic parameters or move them after any type that uses type equivalence.Regression
This is a regression between 7.0 and 8.0.
Testing
Automated test added. Manual test of repros provided by customers.
Risk
Low