Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NLL: incorrect "unused mut" lint warning, with multiple closures #51904

Closed
lqd opened this issue Jun 29, 2018 · 1 comment · Fixed by #51964
Closed

NLL: incorrect "unused mut" lint warning, with multiple closures #51904

lqd opened this issue Jun 29, 2018 · 1 comment · Fixed by #51964
Assignees
Labels
A-NLL Area: Non-lexical lifetimes (NLL) C-enhancement Category: An issue proposing an enhancement or a PR with one. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@lqd
Copy link
Member

lqd commented Jun 29, 2018

Found while trying to bootstrap Rust with NLL enabled, just in case we're not already tracking this incorrect warning (as we're already tracking other similar ones in #51801 and #51830 and more).

Reduced from libsyntax::parser::parser::parse_dot_or_call_expr_with. Probably not exactly minimal, but smaller than the whole parser :)

Repro here on the playground

@lqd lqd added A-NLL Area: Non-lexical lifetimes (NLL) NLL-diagnostics Working towards the "diagnostic parity" goal labels Jun 29, 2018
@nikomatsakis nikomatsakis added this to the Rust 2018 Preview 2 milestone Jun 29, 2018
@nikomatsakis
Copy link
Contributor

Tagging as NLL-deferred because #51918 has precedence

@nikomatsakis nikomatsakis added NLL-deferred and removed NLL-deferred NLL-diagnostics Working towards the "diagnostic parity" goal labels Jun 29, 2018
@jkordish jkordish added C-enhancement Category: An issue proposing an enhancement or a PR with one. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jul 3, 2018
bors added a commit that referenced this issue Jul 5, 2018
…omatsakis

[NLL] Fix various unused mut errors

Closes #51801
Closes #50897
Closes #51830
Closes #51904
cc #51918 - keeping this one open in case there are any more issues

This PR contains multiple changes. List of changes with examples of what they fix:

* Change mir generation so that the parameter variable doesn't get a name when a `ref` pattern is used as an argument
```rust
fn f(ref y: i32) {} // doesn't trigger lint
```
* Change mir generation so that by-move closure captures don't get first moved into a temporary.
```rust
let mut x = 0; // doesn't trigger lint
move || {
    x = 1;
};
```
* Treat generator upvars the same as closure upvars
```rust
let mut x = 0; // This mut is now necessary and is not linted against.
move || {
    x = 1;
    yield;
};
```

r? @nikomatsakis
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-NLL Area: Non-lexical lifetimes (NLL) C-enhancement Category: An issue proposing an enhancement or a PR with one. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants