rustc_pattern_analysis
: always check that deref patterns don't match on the same place as normal constructors
#143472
+142
−53
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.
In #140106, deref pattern validation was tied to the
deref_patterns
feature to temporarily avoid affecting perf. However:rustc_pattern_analysis
. Since they can be used by enablingbox_patterns
instead ofderef_patterns
, it was possible for them to skip validation, resulting in an ICE. This fixes that and adds a regression test.compute_match_usefulness
validate deref patterns by default.In order to avoid doing an extra pass for anything with patterns, the second commit makes
RustcPatCtxt
keep track of whether it encounters a deref pattern, so that it only does the check if so. This is purely for performance. If the perf impact of the first commit is negligible and the complexity cost introduced by the second commit is significant, it may be worth dropping the latter.r? @Nadrieril