diff options
| author | Nadrieril <nadrieril+git@gmail.com> | 2024-02-15 04:22:56 +0100 |
|---|---|---|
| committer | Nadrieril <nadrieril+git@gmail.com> | 2024-02-27 22:37:44 +0100 |
| commit | 5e11a99bb662629cc7d0ad3ce7475b7738c9c2cb (patch) | |
| tree | 2461c787a1490f0b0fe3760670120ba588a70fdd | |
| parent | b6e4299415646106095a7c3ca71aba9d174ee4ea (diff) | |
| download | rust-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.rs | 37 |
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 } }; |
