summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2022-12-15 15:11:51 +0000
committerOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2023-05-15 14:20:31 +0000
commitad424e65d8fda3b3f916da15d2bad5f3203714a1 (patch)
tree1666fbfb7fabeeb57757b41c2e391b1dc7ab472f /tests
parent8d00f762dd330ed44515bf7e95108f4cbf733e66 (diff)
downloadrust-ad424e65d8fda3b3f916da15d2bad5f3203714a1.tar.gz
Always fall back to PartialEq when a constant in a pattern is not recursively structural-eq
Diffstat (limited to 'tests')
-rw-r--r--tests/ui/pattern/usefulness/consts-opaque.rs18
-rw-r--r--tests/ui/pattern/usefulness/consts-opaque.stderr75
2 files changed, 53 insertions, 40 deletions
diff --git a/tests/ui/pattern/usefulness/consts-opaque.rs b/tests/ui/pattern/usefulness/consts-opaque.rs
index ca4fcd85bb6..c10c6205a08 100644
--- a/tests/ui/pattern/usefulness/consts-opaque.rs
+++ b/tests/ui/pattern/usefulness/consts-opaque.rs
@@ -20,11 +20,12 @@ const BAR: Bar = Bar;
#[derive(PartialEq)]
enum Baz {
Baz1,
- Baz2
+ Baz2,
}
impl Eq for Baz {}
const BAZ: Baz = Baz::Baz1;
+#[rustfmt::skip]
fn main() {
match FOO {
FOO => {}
@@ -124,8 +125,16 @@ fn main() {
match WRAPQUUX {
Wrap(_) => {}
- WRAPQUUX => {} // detected unreachable because we do inspect the `Wrap` layer
- //~^ ERROR unreachable pattern
+ WRAPQUUX => {}
+ }
+
+ match WRAPQUUX {
+ Wrap(_) => {}
+ }
+
+ match WRAPQUUX {
+ //~^ ERROR: non-exhaustive patterns: `Wrap(_)` not covered
+ WRAPQUUX => {}
}
#[derive(PartialEq, Eq)]
@@ -138,8 +147,7 @@ fn main() {
match WHOKNOWSQUUX {
WHOKNOWSQUUX => {}
WhoKnows::Yay(_) => {}
- WHOKNOWSQUUX => {} // detected unreachable because we do inspect the `WhoKnows` layer
- //~^ ERROR unreachable pattern
+ WHOKNOWSQUUX => {}
WhoKnows::Nope => {}
}
}
diff --git a/tests/ui/pattern/usefulness/consts-opaque.stderr b/tests/ui/pattern/usefulness/consts-opaque.stderr
index 3f0b4a9f26a..e01b06ccc82 100644
--- a/tests/ui/pattern/usefulness/consts-opaque.stderr
+++ b/tests/ui/pattern/usefulness/consts-opaque.stderr
@@ -1,5 +1,5 @@
error: to use a constant of type `Foo` in a pattern, `Foo` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:30:9
+ --> $DIR/consts-opaque.rs:31:9
|
LL | FOO => {}
| ^^^
@@ -8,7 +8,7 @@ LL | FOO => {}
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
error: to use a constant of type `Foo` in a pattern, `Foo` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:37:9
+ --> $DIR/consts-opaque.rs:38:9
|
LL | FOO_REF => {}
| ^^^^^^^
@@ -17,7 +17,7 @@ LL | FOO_REF => {}
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
warning: to use a constant of type `Foo` in a pattern, `Foo` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:45:9
+ --> $DIR/consts-opaque.rs:46:9
|
LL | FOO_REF_REF => {}
| ^^^^^^^^^^^
@@ -29,7 +29,7 @@ LL | FOO_REF_REF => {}
= note: `#[warn(indirect_structural_match)]` on by default
error: to use a constant of type `Bar` in a pattern, `Bar` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:53:9
+ --> $DIR/consts-opaque.rs:54:9
|
LL | BAR => {} // should not be emitting unreachable warning
| ^^^
@@ -38,7 +38,7 @@ LL | BAR => {} // should not be emitting unreachable warning
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
error: to use a constant of type `Bar` in a pattern, `Bar` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:61:9
+ --> $DIR/consts-opaque.rs:62:9
|
LL | BAR => {}
| ^^^
@@ -47,7 +47,7 @@ LL | BAR => {}
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
error: to use a constant of type `Bar` in a pattern, `Bar` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:70:9
+ --> $DIR/consts-opaque.rs:71:9
|
LL | BAR => {}
| ^^^
@@ -56,7 +56,7 @@ LL | BAR => {}
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
error: to use a constant of type `Bar` in a pattern, `Bar` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:72:9
+ --> $DIR/consts-opaque.rs:73:9
|
LL | BAR => {} // should not be emitting unreachable warning
| ^^^
@@ -65,7 +65,7 @@ LL | BAR => {} // should not be emitting unreachable warning
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
error: to use a constant of type `Baz` in a pattern, `Baz` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:80:9
+ --> $DIR/consts-opaque.rs:81:9
|
LL | BAZ => {}
| ^^^
@@ -74,7 +74,7 @@ LL | BAZ => {}
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
error: to use a constant of type `Baz` in a pattern, `Baz` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:90:9
+ --> $DIR/consts-opaque.rs:91:9
|
LL | BAZ => {}
| ^^^
@@ -83,7 +83,7 @@ LL | BAZ => {}
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
error: to use a constant of type `Baz` in a pattern, `Baz` must be annotated with `#[derive(PartialEq, Eq)]`
- --> $DIR/consts-opaque.rs:97:9
+ --> $DIR/consts-opaque.rs:98:9
|
LL | BAZ => {}
| ^^^
@@ -92,7 +92,7 @@ LL | BAZ => {}
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
error: unreachable pattern
- --> $DIR/consts-opaque.rs:32:9
+ --> $DIR/consts-opaque.rs:33:9
|
LL | FOO => {}
| --- matches any value
@@ -107,7 +107,7 @@ LL | #![deny(unreachable_patterns)]
| ^^^^^^^^^^^^^^^^^^^^
error: unreachable pattern
- --> $DIR/consts-opaque.rs:39:9
+ --> $DIR/consts-opaque.rs:40:9
|
LL | FOO_REF => {}
| ------- matches any value
@@ -116,7 +116,7 @@ LL | Foo(_) => {} // should not be emitting unreachable warning
| ^^^^^^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:53:9
+ --> $DIR/consts-opaque.rs:54:9
|
LL | Bar => {}
| --- matches any value
@@ -124,7 +124,7 @@ LL | BAR => {} // should not be emitting unreachable warning
| ^^^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:56:9
+ --> $DIR/consts-opaque.rs:57:9
|
LL | Bar => {}
| --- matches any value
@@ -133,7 +133,7 @@ LL | _ => {}
| ^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:63:9
+ --> $DIR/consts-opaque.rs:64:9
|
LL | BAR => {}
| --- matches any value
@@ -142,7 +142,7 @@ LL | Bar => {} // should not be emitting unreachable warning
| ^^^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:65:9
+ --> $DIR/consts-opaque.rs:66:9
|
LL | BAR => {}
| --- matches any value
@@ -151,7 +151,7 @@ LL | _ => {}
| ^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:72:9
+ --> $DIR/consts-opaque.rs:73:9
|
LL | BAR => {}
| --- matches any value
@@ -160,7 +160,7 @@ LL | BAR => {} // should not be emitting unreachable warning
| ^^^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:75:9
+ --> $DIR/consts-opaque.rs:76:9
|
LL | BAR => {}
| --- matches any value
@@ -169,7 +169,7 @@ LL | _ => {} // should not be emitting unreachable warning
| ^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:82:9
+ --> $DIR/consts-opaque.rs:83:9
|
LL | BAZ => {}
| --- matches any value
@@ -178,7 +178,7 @@ LL | Baz::Baz1 => {} // should not be emitting unreachable warning
| ^^^^^^^^^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:84:9
+ --> $DIR/consts-opaque.rs:85:9
|
LL | BAZ => {}
| --- matches any value
@@ -187,7 +187,7 @@ LL | _ => {}
| ^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:92:9
+ --> $DIR/consts-opaque.rs:93:9
|
LL | BAZ => {}
| --- matches any value
@@ -196,7 +196,7 @@ LL | _ => {}
| ^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:99:9
+ --> $DIR/consts-opaque.rs:100:9
|
LL | BAZ => {}
| --- matches any value
@@ -205,7 +205,7 @@ LL | Baz::Baz2 => {} // should not be emitting unreachable warning
| ^^^^^^^^^ unreachable pattern
error: unreachable pattern
- --> $DIR/consts-opaque.rs:101:9
+ --> $DIR/consts-opaque.rs:102:9
|
LL | BAZ => {}
| --- matches any value
@@ -213,19 +213,24 @@ LL | BAZ => {}
LL | _ => {} // should not be emitting unreachable warning
| ^ unreachable pattern
-error: unreachable pattern
- --> $DIR/consts-opaque.rs:127:9
+error[E0004]: non-exhaustive patterns: `Wrap(_)` not covered
+ --> $DIR/consts-opaque.rs:135:11
|
-LL | Wrap(_) => {}
- | ------- matches any value
-LL | WRAPQUUX => {} // detected unreachable because we do inspect the `Wrap` layer
- | ^^^^^^^^ unreachable pattern
-
-error: unreachable pattern
- --> $DIR/consts-opaque.rs:141:9
+LL | match WRAPQUUX {
+ | ^^^^^^^^ pattern `Wrap(_)` not covered
+ |
+note: `Wrap<fn(usize, usize) -> usize>` defined here
+ --> $DIR/consts-opaque.rs:117:12
+ |
+LL | struct Wrap<T>(T);
+ | ^^^^
+ = note: the matched value is of type `Wrap<fn(usize, usize) -> usize>`
+help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
+ |
+LL ~ WRAPQUUX => {},
+LL + Wrap(_) => todo!()
|
-LL | WHOKNOWSQUUX => {} // detected unreachable because we do inspect the `WhoKnows` layer
- | ^^^^^^^^^^^^
-error: aborting due to 24 previous errors; 1 warning emitted
+error: aborting due to 23 previous errors; 1 warning emitted
+For more information about this error, try `rustc --explain E0004`.