Skip to content

Commit

Permalink
Rollup merge of rust-lang#64735 - GuillaumeGomez:long-err-explanation…
Browse files Browse the repository at this point in the history
…-E0533, r=Centril

Add long error explanation for E0533

Part of rust-lang#61137
  • Loading branch information
Centril committed Sep 29, 2019
2 parents 66db9e7 + e58e144 commit 787ae9c
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 4 deletions.
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`.

0 comments on commit 787ae9c

Please sign in to comment.