rust/src/test/ui/pattern/usefulness/slice-patterns.rs

97 lines
2.0 KiB
Rust
Raw Normal View History

#![feature(slice_patterns)]
#![deny(unreachable_patterns)]
fn main() {
let s: &[bool] = &[true; 0];
let s0: &[bool; 0] = &[];
let s1: &[bool; 1] = &[false; 1];
let s2: &[bool; 2] = &[false; 2];
let s3: &[bool; 3] = &[false; 3];
let [] = s0;
let [_] = s1;
let [_, _] = s2;
let [..] = s;
let [..] = s0;
let [..] = s1;
let [..] = s2;
let [..] = s3;
let [_, _, ..] = s2;
let [_, .., _] = s2;
let [.., _, _] = s2;
match s1 {
[true, ..] => {}
[.., false] => {}
}
match s2 {
//~^ ERROR `&[false, true]` not covered
[true, ..] => {}
[.., false] => {}
}
match s3 {
//~^ ERROR `&[false, _, true]` not covered
[true, ..] => {}
[.., false] => {}
}
match s {
//~^ ERROR `&[false, true]` not covered
[] => {}
[true, ..] => {}
[.., false] => {}
}
match s3 {
//~^ ERROR `&[false, _, _]` not covered
[true, .., true] => {}
}
match s {
//~^ ERROR `&[_]` not covered
[] => {}
}
match s {
//~^ ERROR `&[_, _]` not covered
[] => {}
[_] => {}
}
match s {
//~^ ERROR `&[false]` not covered
[] => {}
[true, ..] => {}
}
match s {
//~^ ERROR `&[false, _]` not covered
[] => {}
[_] => {}
[true, ..] => {}
}
match s {
//~^ ERROR `&[_, false]` not covered
[] => {}
[_] => {}
[.., true] => {}
}
match s {
[true, ..] => {}
[true, ..] => {} //~ ERROR unreachable pattern
[true] => {} //~ ERROR unreachable pattern
[..] => {}
}
match s {
[.., true] => {}
[.., true] => {} //~ ERROR unreachable pattern
[true] => {} //~ ERROR unreachable pattern
[..] => {}
}
match s {
[false, .., true] => {}
[false, .., true] => {} //~ ERROR unreachable pattern
[false, true] => {} //~ ERROR unreachable pattern
[false] => {}
[..] => {}
}
}