Misleading compiler suggestion: Swapp the equality in rustlib due to mismatched types in user code · Issue #139050 · rust-lang/rust (original) (raw)

Code

use std::fmt::Debug;

pub fn foo<I: Iterator>(mut iter: I, value: &I::Item) where Item: Eq + Debug, { debug_assert_eq!(iter.next(), Some(value)); }

fn main() {}

Current output

error[E0412]: cannot find type Item in this scope --> .\test.rs:5:5 | 5 | Item: Eq + Debug, | ^^^^ not found in this scope

error[E0308]: mismatched types --> .\test.rs:7:35 | 7 | debug_assert_eq!(iter.next(), Some(value)); | ^^^^^^^^^^^ expected Option<<I as Iterator>::Item>, found Option<&<I as Iterator>::Item> | = note: expected enum Option<_> found enum Option<&_> = note: Option<&<I as Iterator>::Item> implements PartialEq<Option<<I as Iterator>::Item>> help: consider swapping the equality --> C:\Users\jjl98.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib/rustlib/src/rust\library\core\src\macros\mod.rs:46:22 | 46| if !(*right_val == *left_val) { | ~~~~~~~~~~ ~~~~~~~~~

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0308, E0412. For more information about an error, try rustc --explain E0308.

Desired output

Rationale and extra context

I'm not entirely sure what the compiler's output should be, but it is inappropriate for the compiler to suggest modifying rustlib when the issue lies in the user code. This suggestion is clearly flawed.

Other cases

Rust Version

rustc 1.85.1 (4eb161250 2025-03-15) binary: rustc commit-hash: 4eb161250e340c8f48f66e2b929ef4a5bed7c181 commit-date: 2025-03-15 host: x86_64-pc-windows-msvc release: 1.85.1 LLVM version: 19.1.7

Anything else?

No response