Skip to content

Add suggestion/explanation to error on trying to mutably borrow immutable reference #45405

Open
@oli-obk

Description

@oli-obk
    let mut mem_buffer : &[u8] = &b"foo"[..];
    let mut reader = &mut mem_buffer as &std::io::Read;
    let mut read_buffer = [0u8, 10];
    reader.read(&mut read_buffer);

reports

error[E0596]: cannot borrow immutable borrowed content `*reader` as mutable
 --> src/main.rs:5:5
  |
5 |     reader.read(&mut read_buffer);
  |     ^^^^^^ cannot borrow as mutable

Which is correct, but the fix is to modify the creation of the reader variable. While this case is easy, it's probably less so in the general case. Possible avenues of improvement:

  1. The easy way this error message can be improved is to mention that the type is &T, but should be &mut T.
  2. If there are explicit type annotations on the variable, a note should point to it
  3. If the variable's type is inferred, a note should point to its initializer and maybe even do some primitive checks that can lead the developer towards the solution.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsC-enhancementCategory: An issue proposing an enhancement or a PR with one.P-lowLow priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.WG-diagnosticsWorking group: Diagnostics

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions