Suggest function borrow ignoring needs_note

`needs_note` is false if we've already suggested why the type is Copy...
but that has nothing to do with the diagnostic.
This commit is contained in:
Michael Goulet 2022-03-28 19:30:39 -07:00
parent a9b02e13a6
commit ac95e80186
9 changed files with 53 additions and 4 deletions

View File

@ -284,10 +284,14 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
None => "value".to_owned(),
};
if self.suggest_borrow_fn_like(&mut err, ty, &move_site_vec, &note_msg) {
// Suppress the next note, since we don't want to put more `Fn`-like bounds onto something that already has them
} else if needs_note {
// Suppress the next suggestion since we don't want to put more bounds onto
// something that already has `Fn`-like bounds (or is a closure), so we can't
// restrict anyways.
} else {
self.suggest_adding_copy_bounds(&mut err, ty, span);
}
if needs_note {
let span = if let Some(local) = place.as_local() {
Some(self.body.local_decls[local].source_info.span)
} else {

View File

@ -12,6 +12,10 @@ note: closure cannot be moved more than once as it is not `Copy` due to moving t
|
LL | a = 1;
| ^
help: consider mutably borrowing `b`
|
LL | let mut c = &mut b;
| ++++
error: aborting due to previous error

View File

@ -11,6 +11,10 @@ note: closure cannot be moved more than once as it is not `Copy` due to moving t
|
LL | if let MultiVariant::Point(ref mut x, _) = point {
| ^^^^^
help: consider mutably borrowing `c`
|
LL | let a = &mut c;
| ++++
error: aborting due to previous error

View File

@ -11,6 +11,10 @@ note: closure cannot be moved more than once as it is not `Copy` due to moving t
|
LL | let SingleVariant::Point(ref mut x, _) = point;
| ^^^^^
help: consider mutably borrowing `c`
|
LL | let b = &mut c;
| ++++
error: aborting due to previous error

View File

@ -11,6 +11,10 @@ note: closure cannot be moved more than once as it is not `Copy` due to moving t
|
LL | x.y.a += 1;
| ^^^^^
help: consider mutably borrowing `hello`
|
LL | let b = &mut hello;
| ++++
error: aborting due to previous error

View File

@ -11,6 +11,10 @@ note: closure cannot be moved more than once as it is not `Copy` due to moving t
|
LL | x.0 += 1;
| ^^^
help: consider mutably borrowing `hello`
|
LL | let b = &mut hello;
| ++++
error: aborting due to previous error

View File

@ -17,11 +17,13 @@ fn takes_fn_mut(m: impl FnMut()) {
fn has_closure() {
let mut x = 0;
let closure = || {
let mut closure = || {
x += 1;
};
takes_fnonce(closure);
//~^ HELP consider mutably borrowing
closure();
//~^ ERROR borrow of moved value
}
fn maybe() -> bool {

View File

@ -29,6 +29,25 @@ help: consider mutably borrowing `m`
LL | takes_fnonce(&mut m);
| ++++
error: aborting due to 2 previous errors
error[E0382]: borrow of moved value: `closure`
--> $DIR/borrow-closures-instead-of-move.rs:25:5
|
LL | takes_fnonce(closure);
| ------- value moved here
LL |
LL | closure();
| ^^^^^^^ value borrowed here after move
|
note: closure cannot be moved more than once as it is not `Copy` due to moving the variable `x` out of its environment
--> $DIR/borrow-closures-instead-of-move.rs:21:9
|
LL | x += 1;
| ^
help: consider mutably borrowing `closure`
|
LL | takes_fnonce(&mut closure);
| ++++
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0382`.

View File

@ -11,6 +11,10 @@ note: closure cannot be moved more than once as it is not `Copy` due to moving t
|
LL | a += 1;
| ^
help: consider mutably borrowing `hello`
|
LL | let b = &mut hello;
| ++++
error: aborting due to previous error