[6.3] Fix a bug with binding parameters under a vanishing tuple AP #86094
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.
This is the test case from #69028 (comment).
Explanation: Parameter binding usually doesn't have an abstraction pattern that's meaningfully different from the formal types of the parameters, but it can when we're emitting a closure in an abstracted type context. A tuple parameter with a type like
(repeat each T)is actually passed as a pack of elements. The binding logic handled some of the cases here, but because it was primarily type-matching on the substituted type rather than the AP, it was not properly handling the vanishing tuple case whereTis a singleton pack and therefore(repeat each T)is no longer a tuple.Original PR: #86078
Risk: Low; the new code re-uses a significant amount of the existing logic from reabstraction thunks, which is fairly well-tested.
Testing: New regression tests added
Reviewers: none as of yet