Skip to content

Commit

Permalink
Don't suggest reborrow if usage is inside a closure
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Sep 5, 2022
1 parent a2cdcb3 commit 41d4ea2
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
3 changes: 2 additions & 1 deletion compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,8 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
let ty = place.ty(self.body, self.infcx.tcx).ty;

// If we're in pattern, we do nothing in favor of the previous suggestion (#80913).
if is_loop_move & !in_pattern {
// Same for if we're in a loop, see #101119.
if is_loop_move & !in_pattern && !matches!(use_spans, UseSpans::ClosureUse { .. }) {
if let ty::Ref(_, _, hir::Mutability::Mut) = ty.kind() {
// We have a `&mut` ref, we need to reborrow on each iteration (#62112).
err.span_suggestion_verbose(
Expand Down
16 changes: 16 additions & 0 deletions src/test/ui/borrowck/issue-101119.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
struct State;

fn once(_: impl FnOnce()) {}

fn fill_memory_blocks_mt(state: &mut State) {
loop {
once(move || {
//~^ ERROR use of moved value: `state`
fill_segment(state);
});
}
}

fn fill_segment(_: &mut State) {}

fn main() {}
15 changes: 15 additions & 0 deletions src/test/ui/borrowck/issue-101119.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
error[E0382]: use of moved value: `state`
--> $DIR/issue-101119.rs:7:14
|
LL | fn fill_memory_blocks_mt(state: &mut State) {
| ----- move occurs because `state` has type `&mut State`, which does not implement the `Copy` trait
LL | loop {
LL | once(move || {
| ^^^^^^^ value moved into closure here, in previous iteration of loop
LL |
LL | fill_segment(state);
| ----- use occurs due to use in closure

error: aborting due to previous error

For more information about this error, try `rustc --explain E0382`.

0 comments on commit 41d4ea2

Please sign in to comment.