Misleading diagnostic for error[E0277]
· Issue #139251 · rust-lang/rust (original) (raw)
Code
enum Foo { Bar { v23: T, y: isize } }
fn f(x: &Foo) { match *x { Foo::Bar { y: y, v23: x } => { assert_eq!(x, 1); assert_eq!(y, 2); } } }
pub fn main() { let x = Foo::Bar { x: 1, y: 2 }; f(&x); }
Current output
error[E0107]: missing generics for enum Foo
--> test.rs:11:10
|
11 | fn f(x: &Foo) {
| ^^^ expected 1 generic argument
|
note: enum defined here, with 1 generic parameter: T
--> test.rs:4:6
|
4 | enum Foo {
| ^^^ -
help: add missing generic argument
|
11 | fn f(x: &Foo) {
| +++
error[E0277]: can't compare &isize
with {integer}
--> test.rs:15:13
|
15 | assert_eq!(y, 2);
| ^^^^^^^^^^^^^^^^ no implementation for &isize == {integer}
|
= help: the trait PartialEq<{integer}>
is not implemented for &isize
= note: this error originates in the macro assert_eq
(in Nightly builds, run with -Z macro-backtrace for more info)
help: consider dereferencing here
--> /home/jl-jiang/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/macros/mod.rs:46:22
|
46 | if !(**left_val == *right_val) {
| +
error[E0559]: variant Foo<_>::Bar
has no field named x
--> test.rs:21:24
|
21 | let x = Foo::Bar { x: 1, y: 2 };
| ^ Foo<_>::Bar
does not have this field
|
= note: available fields are: v23
error: aborting due to 3 previous errors
Some errors have detailed explanations: E0107, E0277, E0559.
For more information about an error, try rustc --explain E0107
.
Desired output
Rationale and extra context
I'm not entirely sure what the compiler's output should be, but it is inappropriate to suggest modifying the standard library when the issue lies in the user code. This suggestion is clearly flawed.
Other cases
Rust Version
rustc 1.88.0-nightly (e2014e876 2025-04-01) binary: rustc commit-hash: e2014e876e3efaa69bf51c19579adb16c3df5f81 commit-date: 2025-04-01 host: x86_64-unknown-linux-gnu release: 1.88.0-nightly LLVM version: 20.1.1
Anything else?
No response