Rollup merge of #78856 - mark-i-m:fix-or-pat-ice, r=matthewjasper
Explicitly checking for or-pattern before test Fixes https://github.com/rust-lang/rust/issues/72680 cc https://github.com/rust-lang/rust/issues/54883 r? ````@varkor````
This commit is contained in:
commit
a29b68f326
2 changed files with 76 additions and 0 deletions
65
src/test/ui/match/issue-72680.rs
Normal file
65
src/test/ui/match/issue-72680.rs
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
// run-pass
|
||||
|
||||
#![feature(or_patterns)]
|
||||
|
||||
fn main() {
|
||||
assert!(f("", 0));
|
||||
assert!(f("a", 1));
|
||||
assert!(f("b", 1));
|
||||
|
||||
assert!(!f("", 1));
|
||||
assert!(!f("a", 0));
|
||||
assert!(!f("b", 0));
|
||||
|
||||
assert!(!f("asdf", 32));
|
||||
|
||||
////
|
||||
|
||||
assert!(!g(true, true, true));
|
||||
assert!(!g(false, true, true));
|
||||
assert!(!g(true, false, true));
|
||||
assert!(!g(false, false, true));
|
||||
assert!(!g(true, true, false));
|
||||
|
||||
assert!(g(false, true, false));
|
||||
assert!(g(true, false, false));
|
||||
assert!(g(false, false, false));
|
||||
|
||||
////
|
||||
|
||||
assert!(!h(true, true, true));
|
||||
assert!(!h(false, true, true));
|
||||
assert!(!h(true, false, true));
|
||||
assert!(!h(false, false, true));
|
||||
assert!(!h(true, true, false));
|
||||
|
||||
assert!(h(false, true, false));
|
||||
assert!(h(true, false, false));
|
||||
assert!(h(false, false, false));
|
||||
}
|
||||
|
||||
fn f(s: &str, num: usize) -> bool {
|
||||
match (s, num) {
|
||||
("", 0) | ("a" | "b", 1) => true,
|
||||
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn g(x: bool, y: bool, z: bool) -> bool {
|
||||
match (x, y, x, z) {
|
||||
(true | false, false, true, false) => true,
|
||||
(false, true | false, true | false, false) => true,
|
||||
(true | false, true | false, true | false, true) => false,
|
||||
(true, true | false, true | false, false) => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn h(x: bool, y: bool, z: bool) -> bool {
|
||||
match (x, (y, (x, (z,)))) {
|
||||
(true | false, (false, (true, (false,)))) => true,
|
||||
(false, (true | false, (true | false, (false,)))) => true,
|
||||
(true | false, (true | false, (true | false, (true,)))) => false,
|
||||
(true, (true | false, (true | false, (false,)))) => false,
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue