Skip to content

Possibly-uninitialized error message doesn't indicate where value isn't initialized #97956

Closed
@jonhoo

Description

@jonhoo

Given the following code: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=d0d96c280bcde85e4d524178fefca741

let pkg;
if true {
    pkg = 1;
} else {
    // I forgot to initialize pkg!
}
drop(pkg);

The current output is:

error[[E0381]](https://doc.rust-lang.org/stable/error-index.html#E0381): use of possibly-uninitialized variable: `pkg`
 --> src/main.rs:8:10
  |
8 |     drop(pkg);
  |          ^^^ use of possibly-uninitialized `pkg`

Ideally the output should look like:

error[[E0381]](https://doc.rust-lang.org/stable/error-index.html#E0381): use of possibly-uninitialized variable: `pkg`
 --> src/main.rs:8:10
  |
8 |     drop(pkg);
  |          ^^^ use of possibly-uninitialized `pkg`
  |
  | hint: the value is not assigned in the branch starting on src/main.rs:5:
  |
5 |     } else {
  |

Because it can be difficult to figure out exactly which branch is failing to initialize a value, especially if it's not as simple as one if as above. For example, there may be a whole tree of conditionals between the let and the use, where only one sub-branch fails to initialize the variable, but spotting that amidst all the code isn't easy.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsT-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