Skip to content

Commit

Permalink
fix false negative for unused_mut
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukas Markeffsky committed Apr 28, 2023
1 parent 43a7802 commit 69c71da
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 6 deletions.
11 changes: 6 additions & 5 deletions compiler/rustc_borrowck/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -935,6 +935,7 @@ enum InitializationRequiringAction {
PartialAssignment,
}

#[derive(Debug)]
struct RootPlace<'tcx> {
place_local: Local,
place_projection: &'tcx [PlaceElem<'tcx>],
Expand Down Expand Up @@ -1848,11 +1849,6 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
// is allowed, remove this match arm.
ty::Adt(..) | ty::Tuple(..) => {
check_parent_of_field(self, location, place_base, span, flow_state);

// rust-lang/rust#21232, #54499, #54986: during period where we reject
// partial initialization, do not complain about unnecessary `mut` on
// an attempt to do a partial initialization.
self.used_mut.insert(place.local);
}

_ => {}
Expand Down Expand Up @@ -1940,6 +1936,11 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
(prefix, base, span),
mpi,
);

// rust-lang/rust#21232, #54499, #54986: during period where we reject
// partial initialization, do not complain about unnecessary `mut` on
// an attempt to do a partial initialization.
this.used_mut.insert(base.local);
}
}
}
Expand Down
8 changes: 8 additions & 0 deletions tests/ui/lint/unused/lint-unused-mut-variables.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,3 +205,11 @@ fn bar() {
let mut b = vec![2]; //~ ERROR: variable does not need to be mutable

}

struct Arg(i32);

// Regression test for https://github.com/rust-lang/rust/issues/110849
fn write_through_reference(mut arg: &mut Arg) {
//~^ WARN: variable does not need to be mutable
arg.0 = 1
}
10 changes: 9 additions & 1 deletion tests/ui/lint/unused/lint-unused-mut-variables.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -218,5 +218,13 @@ note: the lint level is defined here
LL | #[deny(unused_mut)]
| ^^^^^^^^^^

error: aborting due to previous error; 25 warnings emitted
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:212:28
|
LL | fn write_through_reference(mut arg: &mut Arg) {
| ----^^^
| |
| help: remove this `mut`

error: aborting due to previous error; 26 warnings emitted

0 comments on commit 69c71da

Please sign in to comment.