about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNadrieril <nadrieril+git@gmail.com>2024-02-15 04:22:56 +0100
committerNadrieril <nadrieril+git@gmail.com>2024-02-27 22:37:44 +0100
commit5e11a99bb662629cc7d0ad3ce7475b7738c9c2cb (patch)
tree2461c787a1490f0b0fe3760670120ba588a70fdd
parentb6e4299415646106095a7c3ca71aba9d174ee4ea (diff)
downloadrust-5e11a99bb662629cc7d0ad3ce7475b7738c9c2cb.tar.gz
rust-5e11a99bb662629cc7d0ad3ce7475b7738c9c2cb.zip
Remove hacky branch in `sort_candidate`
Reusing `self.test` wasn't actually pulling a lot of weight.
-rw-r--r--compiler/rustc_mir_build/src/build/matches/test.rs37
1 files changed, 14 insertions, 23 deletions
diff --git a/compiler/rustc_mir_build/src/build/matches/test.rs b/compiler/rustc_mir_build/src/build/matches/test.rs
index 1c97de58863..a97d0de27e3 100644
--- a/compiler/rustc_mir_build/src/build/matches/test.rs
+++ b/compiler/rustc_mir_build/src/build/matches/test.rs
@@ -673,6 +673,10 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
                     }
                 }
             }
+            (TestKind::Len { .. }, _) => {
+                fully_matched = false;
+                None
+            }
 
             (TestKind::Range(test), &TestCase::Range(pat)) => {
                 if test.as_ref() == pat {
@@ -700,29 +704,16 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
                 None
             }
 
-            (&TestKind::Eq { .. } | &TestKind::Len { .. }, _) => {
-                // The call to `self.test(&match_pair)` below is not actually used to generate any
-                // MIR. Instead, we just want to compare with `test` (the parameter of the method)
-                // to see if it is the same.
-                //
-                // However, at this point we can still encounter or-patterns that were extracted
-                // from previous calls to `sort_candidate`, so we need to manually address that
-                // case to avoid panicking in `self.test()`.
-                if let TestCase::Or { .. } = &match_pair.test_case {
-                    return None;
-                }
-
-                // These are all binary tests.
-                //
-                // FIXME(#29623) we can be more clever here
-                let pattern_test = self.test(match_pair);
-                if pattern_test.kind == test.kind {
-                    fully_matched = true;
-                    Some(0)
-                } else {
-                    fully_matched = false;
-                    None
-                }
+            // FIXME(#29623): return `Some(1)` when the values are different.
+            (TestKind::Eq { value: test_val, .. }, TestCase::Constant { value: case_val })
+                if test_val == case_val =>
+            {
+                fully_matched = true;
+                Some(0)
+            }
+            (TestKind::Eq { .. }, _) => {
+                fully_matched = false;
+                None
             }
         };