about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorNadrieril <nadrieril+git@gmail.com>2024-01-09 17:05:55 +0100
committerNadrieril <nadrieril+git@gmail.com>2024-01-09 17:05:55 +0100
commit807d618676052befa3e621dc42e7be0b4c5f1576 (patch)
treea64fd653fe4a5ca64c18f1e4b8a8ffc6a8463965 /compiler
parent560beb1ad423a9f3e447bdeefded8994cd8af75c (diff)
downloadrust-807d618676052befa3e621dc42e7be0b4c5f1576.tar.gz
rust-807d618676052befa3e621dc42e7be0b4c5f1576.zip
Only check bindings if the pattern is an or- or never- pattern
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_resolve/src/late.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/compiler/rustc_resolve/src/late.rs b/compiler/rustc_resolve/src/late.rs
index 90b27856161..2a8bf1fe2d3 100644
--- a/compiler/rustc_resolve/src/late.rs
+++ b/compiler/rustc_resolve/src/late.rs
@@ -3324,7 +3324,17 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
 
     /// Check the consistency of bindings wrt or-patterns and never patterns.
     fn check_consistent_bindings(&mut self, pat: &'ast Pat) {
-        let _ = self.compute_and_check_binding_map(pat);
+        let mut is_or_or_never = false;
+        pat.walk(&mut |pat| match pat.kind {
+            PatKind::Or(..) | PatKind::Never => {
+                is_or_or_never = true;
+                false
+            }
+            _ => true,
+        });
+        if is_or_or_never {
+            let _ = self.compute_and_check_binding_map(pat);
+        }
     }
 
     fn resolve_arm(&mut self, arm: &'ast Arm) {