Robustify and genericize return-type-notation resolution in resolve_bound_vars
#132047
+119
−32
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 item that the
T::method(..)
item was written, 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(..): Send
bounds.