Robustify and genericize return-type-notation resolution in resolve_bound_vars#132047
Merged
bors merged 3 commits intorust-lang:masterfrom Dec 1, 2024
Merged
Robustify and genericize return-type-notation resolution in resolve_bound_vars#132047bors merged 3 commits intorust-lang:masterfrom
resolve_bound_vars#132047bors merged 3 commits intorust-lang:masterfrom
Conversation
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
#129629 implemented return-type-notation (RTN) in its path form, like
where T::method(..): Bound. As part of lowering, we must record the late-bound vars for the where clause introduced by the method (namely, its early- and late-bound lifetime arguments, sincewhere T::method(..)turns into a higher-ranked where clause over all of the lifetimes according to RFC 3654).However, this logic was only looking at the where clauses of the parent item that the
T::method(..)bound was written on, and not any parent items. This PR generalizes that logic to look at the parent item (i.e. the outer impl or trait) instead and fixes a (debug only) assertion as an effect.This logic is also more general and likely easier to adapt to more interesting (though likely very far off) cases like non-lifetime binder
for<T: Trait> T::method(..): Sendbounds.Tracking: