rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
96.69k stars 12.49k forks source link

Duplicated label on E0381 #129274

Closed estebank closed 2 weeks ago

estebank commented 3 weeks ago

Code

fn blah() {
    loop {
        let blah: Option<String>; 
        if true {
            blah = Some("".to_string());
        }

        if let Some(blah) = blah.as_ref() {
            // ...
        }
    }
}

Current output

error[E0381]: used binding `blah` is possibly-uninitialized
 --> src/lib.rs:8:29
  |
3 |         let blah: Option<String>; 
  |             ---- binding declared here but left uninitialized
4 |         if true {
5 |             blah = Some("".to_string());
  |             ----
  |             |
  |             binding initialized here in some conditions
  |             binding initialized here in some conditions
...
8 |         if let Some(blah) = blah.as_ref() {
  |                             ^^^^ `blah` used here but it is possibly-uninitialized

Desired output

error[E0381]: used binding `blah` is possibly-uninitialized
 --> src/lib.rs:8:29
  |
3 |         let blah: Option<String>; 
  |             ---- binding declared here but left uninitialized
4 |         if true {
5 |             blah = Some("".to_string());
  |             ---- binding initialized here in some conditions
...
8 |         if let Some(blah) = blah.as_ref() {
  |                             ^^^^ `blah` used here but it is possibly-uninitialized

Rationale and extra context

The duplicated labels are unnecessary given that they point at the exact same place, as far as the code the user wrote is concerned.

Other cases

Noticed when looking at https://github.com/rust-lang/rust/issues/57553#issuecomment-753534282

Rust Version

At least from 1.80 to current 1.82.

Anything else?

No response

stephen-lazaro commented 3 weeks ago

@rustbot claim