mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
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:
parent
a9b02e13a6
commit
ac95e80186
@ -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, ¬e_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 {
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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`.
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user