Skip to content

NLL: unused_mut lint triggered by for _ in <unreachable> #54586

@pnkfelix

Description

@pnkfelix
Member

Consider the following code (play):

#![feature(nll)]
#![allow(unreachable_code)]

fn main() {
    for _ in { return (); 0..3 } {
    }
}

It signals the following diagnostic:

warning: variable does not need to be mutable
 --> src/main.rs:5:14
  |
5 |     for _ in { return (); 0..3 } {
  |              --^^^^^^^^^^^^^^^^^
  |              |
  |              help: remove this `mut`
  |
  = note: #[warn(unused_mut)] on by default

Which is pretty nonsensical in appearance.

(It almost certainly arises due to a legitimate mut appeared in the expansion of for. We probably just need to check whether a mut that has been introduced is due to legitimate source code or if its due to an internal expansion, and use that knowledge when we decide whether to signal the unused_mut lint.)

Activity

added
A-diagnosticsArea: Messages for errors, warnings, and lints
on Sep 26, 2018
added
A-NLLArea: Non-lexical lifetimes (NLL)
NLL-diagnosticsWorking towards the "diagnostic parity" goal
on Sep 26, 2018
pnkfelix

pnkfelix commented on Sep 26, 2018

@pnkfelix
MemberAuthor

putting on the RC2 milestone under the assumption that this should be relatively straight-forward to resolve.

added this to the Edition 2018 RC 2 milestone on Sep 26, 2018
varkor

varkor commented on Sep 26, 2018

@varkor
Member

This should be fixed in #54125, when it's merged.

pnkfelix

pnkfelix commented on Oct 2, 2018

@pnkfelix
MemberAuthor

I'm going to also assign @varkor since they have been participating in discussion about this. Even if @varkor makes the main PR, @blitzerr might be helpful in e.g. confirming the quality of the regression test, etc.

added a commit that references this issue on Oct 5, 2018
3810657
added a commit that references this issue on Oct 23, 2018
7ee68d7
added a commit that references this issue on Jul 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

A-NLLArea: Non-lexical lifetimes (NLL)A-diagnosticsArea: Messages for errors, warnings, and lintsNLL-diagnosticsWorking towards the "diagnostic parity" goal

Type

No type

Projects

No projects

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @pnkfelix@varkor@blitzerr@csmoe

      Issue actions

        NLL: unused_mut lint triggered by `for _ in <unreachable>` · Issue #54586 · rust-lang/rust