Skip to content

Commit 4dc5697

Browse files
committed
Add some slice-pattern exhaustiveness tests
1 parent 2e4da3c commit 4dc5697

File tree

2 files changed

+213
-0
lines changed

2 files changed

+213
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#![feature(slice_patterns)]
2+
#![deny(unreachable_patterns)]
3+
4+
fn main() {
5+
let s: &[bool] = &[true; 0];
6+
let s0: &[bool; 0] = &[];
7+
let s1: &[bool; 1] = &[false; 1];
8+
let s2: &[bool; 2] = &[false; 2];
9+
let s3: &[bool; 3] = &[false; 3];
10+
11+
let [] = s0;
12+
let [_] = s1;
13+
let [_, _] = s2;
14+
15+
let [..] = s;
16+
let [..] = s0;
17+
let [..] = s1;
18+
let [..] = s2;
19+
let [..] = s3;
20+
21+
let [_, _, ..] = s2;
22+
let [_, .., _] = s2;
23+
let [.., _, _] = s2;
24+
25+
match s1 {
26+
[true, ..] => {}
27+
[.., false] => {}
28+
}
29+
match s2 {
30+
//~^ ERROR `&[false, true]` not covered
31+
[true, ..] => {}
32+
[.., false] => {}
33+
}
34+
match s3 {
35+
//~^ ERROR `&[false, _, true]` not covered
36+
[true, ..] => {}
37+
[.., false] => {}
38+
}
39+
match s {
40+
//~^ ERROR `&[false, true]` not covered
41+
[] => {}
42+
[true, ..] => {}
43+
[.., false] => {}
44+
}
45+
46+
match s3 {
47+
//~^ ERROR `&[false, _, _]` not covered
48+
[true, .., true] => {}
49+
}
50+
match s {
51+
//~^ ERROR `&[_]` not covered
52+
[] => {}
53+
}
54+
match s {
55+
//~^ ERROR `&[_, _]` not covered
56+
[] => {}
57+
[_] => {}
58+
}
59+
match s {
60+
//~^ ERROR `&[false]` not covered
61+
[] => {}
62+
[true, ..] => {}
63+
}
64+
match s {
65+
//~^ ERROR `&[false, _]` not covered
66+
[] => {}
67+
[_] => {}
68+
[true, ..] => {}
69+
}
70+
match s {
71+
//~^ ERROR `&[_, false]` not covered
72+
[] => {}
73+
[_] => {}
74+
[.., true] => {}
75+
}
76+
77+
match s {
78+
[true, ..] => {}
79+
[true, ..] => {} //~ ERROR unreachable pattern
80+
[true] => {} //~ ERROR unreachable pattern
81+
[..] => {}
82+
}
83+
match s {
84+
[.., true] => {}
85+
[.., true] => {} //~ ERROR unreachable pattern
86+
[true] => {} //~ ERROR unreachable pattern
87+
[..] => {}
88+
}
89+
match s {
90+
[false, .., true] => {}
91+
[false, .., true] => {} //~ ERROR unreachable pattern
92+
[false, true] => {} //~ ERROR unreachable pattern
93+
[false] => {}
94+
[..] => {}
95+
}
96+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
error[E0004]: non-exhaustive patterns: `&[false, true]` not covered
2+
--> $DIR/slice-patterns.rs:29:11
3+
|
4+
LL | match s2 {
5+
| ^^ pattern `&[false, true]` not covered
6+
|
7+
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
8+
9+
error[E0004]: non-exhaustive patterns: `&[false, _, true]` not covered
10+
--> $DIR/slice-patterns.rs:34:11
11+
|
12+
LL | match s3 {
13+
| ^^ pattern `&[false, _, true]` not covered
14+
|
15+
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
16+
17+
error[E0004]: non-exhaustive patterns: `&[false, true]` not covered
18+
--> $DIR/slice-patterns.rs:39:11
19+
|
20+
LL | match s {
21+
| ^ pattern `&[false, true]` not covered
22+
|
23+
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
24+
25+
error[E0004]: non-exhaustive patterns: `&[false, _, _]` not covered
26+
--> $DIR/slice-patterns.rs:46:11
27+
|
28+
LL | match s3 {
29+
| ^^ pattern `&[false, _, _]` not covered
30+
|
31+
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
32+
33+
error[E0004]: non-exhaustive patterns: `&[_]` not covered
34+
--> $DIR/slice-patterns.rs:50:11
35+
|
36+
LL | match s {
37+
| ^ pattern `&[_]` not covered
38+
|
39+
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
40+
41+
error[E0004]: non-exhaustive patterns: `&[_, _]` not covered
42+
--> $DIR/slice-patterns.rs:54:11
43+
|
44+
LL | match s {
45+
| ^ pattern `&[_, _]` not covered
46+
|
47+
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
48+
49+
error[E0004]: non-exhaustive patterns: `&[false]` not covered
50+
--> $DIR/slice-patterns.rs:59:11
51+
|
52+
LL | match s {
53+
| ^ pattern `&[false]` not covered
54+
|
55+
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
56+
57+
error[E0004]: non-exhaustive patterns: `&[false, _]` not covered
58+
--> $DIR/slice-patterns.rs:64:11
59+
|
60+
LL | match s {
61+
| ^ pattern `&[false, _]` not covered
62+
|
63+
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
64+
65+
error[E0004]: non-exhaustive patterns: `&[_, false]` not covered
66+
--> $DIR/slice-patterns.rs:70:11
67+
|
68+
LL | match s {
69+
| ^ pattern `&[_, false]` not covered
70+
|
71+
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
72+
73+
error: unreachable pattern
74+
--> $DIR/slice-patterns.rs:79:9
75+
|
76+
LL | [true, ..] => {}
77+
| ^^^^^^^^^^
78+
|
79+
note: lint level defined here
80+
--> $DIR/slice-patterns.rs:2:9
81+
|
82+
LL | #![deny(unreachable_patterns)]
83+
| ^^^^^^^^^^^^^^^^^^^^
84+
85+
error: unreachable pattern
86+
--> $DIR/slice-patterns.rs:80:9
87+
|
88+
LL | [true] => {}
89+
| ^^^^^^
90+
91+
error: unreachable pattern
92+
--> $DIR/slice-patterns.rs:85:9
93+
|
94+
LL | [.., true] => {}
95+
| ^^^^^^^^^^
96+
97+
error: unreachable pattern
98+
--> $DIR/slice-patterns.rs:86:9
99+
|
100+
LL | [true] => {}
101+
| ^^^^^^
102+
103+
error: unreachable pattern
104+
--> $DIR/slice-patterns.rs:91:9
105+
|
106+
LL | [false, .., true] => {}
107+
| ^^^^^^^^^^^^^^^^^
108+
109+
error: unreachable pattern
110+
--> $DIR/slice-patterns.rs:92:9
111+
|
112+
LL | [false, true] => {}
113+
| ^^^^^^^^^^^^^
114+
115+
error: aborting due to 15 previous errors
116+
117+
For more information about this error, try `rustc --explain E0004`.

0 commit comments

Comments
 (0)