Skip to content

Point at cause of expectation for type mismatch on let assignments with explicit type #61067

Closed
@estebank

Description

@estebank

Given

fn foo() -> i32 {
    let s: i32 = 3usize;
    s
}

we present

error[E0308]: mismatched types
 --> src/lib.rs:2:18
  |
2 |     let s: i32 = 3usize;
  |                  ^^^^^^ expected i32, found usize
help: change the type of the numeric literal from `usize` to `i32`
  |
2 |     let s: i32 = 3i32;
  |                  ^^^^

We would ideally also point at the assignment's type in the same way we do for type mismatches against a return type:

error[E0308]: mismatched types
 --> src/lib.rs:2:18
  |
2 |     let s: i32 = 3usize;
  |            ---   ^^^^^^ expected i32, found usize
  |            |
  |            expected due to this
help: change the type of the numeric literal from `usize` to `i32`
  |
2 |     let s: i32 = 3i32;
  |                  ^^^^

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsA-suggestion-diagnosticsArea: Suggestions generated by the compiler applied by `cargo fix`C-enhancementCategory: An issue proposing an enhancement or a PR with one.D-papercutDiagnostics: An error or lint that needs small tweaks.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions