diff options
| author | Nadrieril <nadrieril+git@gmail.com> | 2024-03-02 02:49:33 +0100 |
|---|---|---|
| committer | Nadrieril <nadrieril+git@gmail.com> | 2024-03-02 18:38:37 +0100 |
| commit | d46ff6415c033ccfebac3d2a757908611a67d324 (patch) | |
| tree | 5f59c97de9181caac2648685cbf83b16849ba75c /tests/ui/pattern | |
| parent | edea739292f6ca2c69ad0d70d250806b579a1172 (diff) | |
| download | rust-d46ff6415c033ccfebac3d2a757908611a67d324.tar.gz rust-d46ff6415c033ccfebac3d2a757908611a67d324.zip | |
Fix a subtle regression
Before, the SwitchInt cases were computed in two passes: if the first pass accepted e.g. 0..=5 and then 1, the second pass would not accept 0..=5 anymore because 1 would be listed in the SwitchInt options. Now there's a single pass, so if we sort 0..=5 we must take care to not sort a subsequent 1.
Diffstat (limited to 'tests/ui/pattern')
| -rw-r--r-- | tests/ui/pattern/usefulness/integer-ranges/regression-switchint-sorting-with-ranges.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/ui/pattern/usefulness/integer-ranges/regression-switchint-sorting-with-ranges.rs b/tests/ui/pattern/usefulness/integer-ranges/regression-switchint-sorting-with-ranges.rs new file mode 100644 index 00000000000..bacb60a108b --- /dev/null +++ b/tests/ui/pattern/usefulness/integer-ranges/regression-switchint-sorting-with-ranges.rs @@ -0,0 +1,14 @@ +//@ run-pass +// +// Regression test for match lowering to MIR: when gathering candidates, by the time we get to the +// range we know the range will only match on the failure case of the switchint. Hence we mustn't +// add the `1` to the switchint or the range would be incorrectly sorted. +#![allow(unreachable_patterns)] +fn main() { + match 1 { + 10 => unreachable!(), + 0..=5 => {} + 1 => unreachable!(), + _ => unreachable!(), + } +} |
