You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Possibly-uninitialized error message doesn't indicate where value isn't initialized #97956
let pkg;iftrue{
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.
Would a successful fix for this step you through the locations more than blast out all of them? i.e. hint: the value is *first* not assigned in the branch starting on ...
It's a good question. I think you would actually want all of them at once, because you will have to fix each one anyway. One possible exception is if the value isn't set in any branch, in which case I think just pointing out that it needs to be set is sufficient.
error[E0381]: used binding `pkg` isn't initialized in all conditions
--> f43.rs:8:10
|
2 | let pkg;
| --- binding declared here but left uninitialized
...
5 | } else {
| ------ `pkg` is uninitialized if this `else` arm is executed
...
8 | drop(pkg);
| ^^^ `pkg` used here but it isn't initialized in all conditions
Reacted by Jon Gjengset, Aspen Smith and memoryruins
Activity
jonhoo commentedon Jun 10, 2022
Here's a more elaborate case simplified from where this originally hit me: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0a43b50d67a4b2f30f06b9b8f2efb7af
rseymour commentedon Jun 10, 2022
Would a successful fix for this step you through the locations more than blast out all of them? i.e.
hint: the value is *first* not assigned in the branch starting on...jonhoo commentedon Jun 10, 2022
It's a good question. I think you would actually want all of them at once, because you will have to fix each one anyway. One possible exception is if the value isn't set in any branch, in which case I think just pointing out that it needs to be set is sufficient.
estebank commentedon Jun 21, 2022
Output with #98360:
Rollup merge of rust-lang#98360 - estebank:uninit-binding, r=oli-obk
Rollup merge of rust-lang#98360 - estebank:uninit-binding, r=oli-obk