diff options
| author | Nadrieril <nadrieril+git@gmail.com> | 2023-10-30 15:31:00 +0100 |
|---|---|---|
| committer | Nadrieril <nadrieril+git@gmail.com> | 2023-10-30 15:31:00 +0100 |
| commit | d5e836cf0ce49761524e9c8ffb121e186e774052 (patch) | |
| tree | f2363c97f395b81363a8a5c6b6697595add5782c | |
| parent | 9d6d5d48948945debca5a693f6030246f7bb2baf (diff) | |
| download | rust-d5e836cf0ce49761524e9c8ffb121e186e774052.tar.gz rust-d5e836cf0ce49761524e9c8ffb121e186e774052.zip | |
Correctly handle nested or-patterns in column-wise analyses
| -rw-r--r-- | compiler/rustc_mir_build/src/thir/pattern/usefulness.rs | 2 | ||||
| -rw-r--r-- | tests/ui/or-patterns/exhaustiveness-pass.rs | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/compiler/rustc_mir_build/src/thir/pattern/usefulness.rs b/compiler/rustc_mir_build/src/thir/pattern/usefulness.rs index 25e0f3ceaa4..59f0849d08b 100644 --- a/compiler/rustc_mir_build/src/thir/pattern/usefulness.rs +++ b/compiler/rustc_mir_build/src/thir/pattern/usefulness.rs @@ -931,7 +931,7 @@ impl<'p, 'tcx> PatternColumn<'p, 'tcx> { let specialized = pat.specialize(pcx, &ctor); for (subpat, column) in specialized.iter().zip(&mut specialized_columns) { if subpat.is_or_pat() { - column.patterns.extend(subpat.iter_fields()) + column.patterns.extend(subpat.flatten_or_pat()) } else { column.patterns.push(subpat) } diff --git a/tests/ui/or-patterns/exhaustiveness-pass.rs b/tests/ui/or-patterns/exhaustiveness-pass.rs index e8c8a0e7ba5..428b9a19fe6 100644 --- a/tests/ui/or-patterns/exhaustiveness-pass.rs +++ b/tests/ui/or-patterns/exhaustiveness-pass.rs @@ -35,4 +35,10 @@ fn main() { ((0, 0) | (1, 0),) => {} _ => {} } + + // This one caused ICE https://github.com/rust-lang/rust/issues/117378 + match (0u8, 0) { + (x @ 0 | x @ (1 | 2), _) => {} + (3.., _) => {} + } } |
