only resolve top-level guard patterns' guards once #141267
Merged
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.
We resolve guard patterns' guards in
resolve_pattern_inner
, so to avoid resolving them multiple times, we must avoid doing so earlier. To accomplish this,LateResolutionVisitor::visit_pat
contains a case for guard patterns that avoids visiting their guards while walking patterns.This PR fixes #141265, which was due to
visit::walk_pat
being used instead; this meant guards at the top level of a pattern would be visited twice. e.g. it would ICE onfor x if x in [] {}
, but notfor (x if x) in [] {}
.visit_pat
was already used for the guard pattern in the second example, on account of the top-level pattern being parens.