1
Fork 0

Rollup merge of #64735 - GuillaumeGomez:long-err-explanation-E0533, r=Centril

Add long error explanation for E0533

Part of https://github.com/rust-lang/rust/issues/61137
This commit is contained in:
Mazdak Farrokhzad 2019-09-29 20:34:14 +02:00 committed by GitHub
commit f34e2b1e7c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 67 additions and 4 deletions

View file

@ -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.
@ -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 `{}`

View file

@ -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`
}

View file

@ -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`.

View file

@ -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`.

View file

@ -6,3 +6,4 @@ LL | Self::A => (),
error: aborting due to previous error
For more information about this error, try `rustc --explain E0533`.

View file

@ -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`.