Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add long error explanation for E0533 #64735

Merged
merged 2 commits into from
Sep 29, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 37 additions & 1 deletion src/librustc_typeck/error_codes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3610,6 +3610,43 @@ match r {
```
"##,

E0533: r##"
An item which isn't a unit struct, a variant, nor a constant has been used as a
match pattern.

Erroneous code example:

```compile_fail,E0533
struct Tortoise;

impl Tortoise {
fn turtle(&self) -> u32 { 0 }
}

match 0u32 {
Tortoise::turtle => {} // Error!
_ => {}
}
if let Tortoise::turtle = 0u32 {} // Same error!
```

If you want to match against a value returned by a method, you need to bind the
value first:

```
struct Tortoise;

impl Tortoise {
fn turtle(&self) -> u32 { 0 }
}

match 0u32 {
x if x == Tortoise.turtle() => {} // Bound into `x` then we compare it!
_ => {}
}
```
"##,

E0534: r##"
The `inline` attribute was malformed.

Expand Down Expand Up @@ -4935,7 +4972,6 @@ and the pin is required to keep it in the same place in memory.
E0377, // the trait `CoerceUnsized` may only be implemented for a coercion
// between structures with the same definition
// E0558, // replaced with a generic attribute input check
E0533, // `{}` does not name a unit variant, unit struct or a constant
// E0563, // cannot determine a type for this `impl Trait` removed in 6383de15
E0564, // only named lifetimes are allowed in `impl Trait`,
// but `{}` was found in the type `{}`
Expand Down
6 changes: 6 additions & 0 deletions src/test/ui/methods/method-path-in-pattern.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,10 @@ fn main() {
<Foo>::trait_bar => {}
//~^ ERROR expected unit struct/variant or constant, found method `<Foo>::trait_bar`
}
if let Foo::bar = 0u32 {}
//~^ ERROR expected unit struct/variant or constant, found method `<Foo>::bar`
if let <Foo>::bar = 0u32 {}
//~^ ERROR expected unit struct/variant or constant, found method `<Foo>::bar`
if let Foo::trait_bar = 0u32 {}
//~^ ERROR expected unit struct/variant or constant, found method `<Foo>::trait_bar`
}
21 changes: 20 additions & 1 deletion src/test/ui/methods/method-path-in-pattern.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,24 @@ error[E0533]: expected unit struct/variant or constant, found method `<Foo>::tra
LL | <Foo>::trait_bar => {}
| ^^^^^^^^^^^^^^^^

error: aborting due to 3 previous errors
error[E0533]: expected unit struct/variant or constant, found method `<Foo>::bar`
--> $DIR/method-path-in-pattern.rs:26:12
|
LL | if let Foo::bar = 0u32 {}
| ^^^^^^^^

error[E0533]: expected unit struct/variant or constant, found method `<Foo>::bar`
--> $DIR/method-path-in-pattern.rs:28:12
|
LL | if let <Foo>::bar = 0u32 {}
| ^^^^^^^^^^

error[E0533]: expected unit struct/variant or constant, found method `<Foo>::trait_bar`
--> $DIR/method-path-in-pattern.rs:30:12
|
LL | if let Foo::trait_bar = 0u32 {}
| ^^^^^^^^^^^^^^

error: aborting due to 6 previous errors

For more information about this error, try `rustc --explain E0533`.
3 changes: 2 additions & 1 deletion src/test/ui/qualified/qualified-path-params.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ LL | 0 ..= <S as Tr>::A::f::<u8> => {}

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0029`.
Some errors have detailed explanations: E0029, E0533.
For more information about an error, try `rustc --explain E0029`.
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ LL | Self::A => (),

error: aborting due to previous error

For more information about this error, try `rustc --explain E0533`.
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,5 @@ LL | let Alias::Unit() = panic!();

error: aborting due to 5 previous errors

Some errors have detailed explanations: E0164, E0618.
Some errors have detailed explanations: E0164, E0533, E0618.
For more information about an error, try `rustc --explain E0164`.