mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 07:44:10 +00:00
Remove asterisk suggestion for move errors in borrowck
As per issue #54985 removes the not useful suggestion to remove asterisk in move errors. Includes minor changes to tests in the `ui` suite to account for the removed suggestion.
This commit is contained in:
parent
acda261de8
commit
de677b993f
@ -503,32 +503,12 @@ impl<'a, 'gcx, 'tcx> MirBorrowckCtxt<'a, 'gcx, 'tcx> {
|
||||
move_from,
|
||||
..
|
||||
} => {
|
||||
let try_remove_deref = match move_from {
|
||||
Place::Projection(box Projection {
|
||||
elem: ProjectionElem::Deref,
|
||||
..
|
||||
}) => true,
|
||||
_ => false,
|
||||
};
|
||||
if try_remove_deref && snippet.starts_with('*') {
|
||||
// The snippet doesn't start with `*` in (e.g.) index
|
||||
// expressions `a[b]`, which roughly desugar to
|
||||
// `*Index::index(&a, b)` or
|
||||
// `*IndexMut::index_mut(&mut a, b)`.
|
||||
err.span_suggestion(
|
||||
span,
|
||||
"consider removing the `*`",
|
||||
snippet[1..].to_owned(),
|
||||
Applicability::Unspecified,
|
||||
);
|
||||
} else {
|
||||
err.span_suggestion(
|
||||
span,
|
||||
"consider borrowing here",
|
||||
format!("&{}", snippet),
|
||||
Applicability::Unspecified,
|
||||
);
|
||||
}
|
||||
err.span_suggestion(
|
||||
span,
|
||||
"consider borrowing here",
|
||||
format!("&{}", snippet),
|
||||
Applicability::Unspecified,
|
||||
);
|
||||
|
||||
if binds_to.is_empty() {
|
||||
let place_ty = move_from.ty(self.mir, self.infcx.tcx).ty;
|
||||
|
@ -6,7 +6,7 @@ LL | match *s { S(v) => v }
|
||||
| | |
|
||||
| | data moved here
|
||||
| | move occurs because `v` has type `std::vec::Vec<isize>`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `s`
|
||||
| help: consider borrowing here: `&*s`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -5,7 +5,7 @@ LL | let _b = *y;
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because `*y` has type `std::boxed::Box<i32>`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `y`
|
||||
| help: consider borrowing here: `&*y`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -2,7 +2,7 @@ error[E0507]: cannot move out of `f.0` which is behind a shared reference
|
||||
--> $DIR/borrowck-move-error-with-note.rs:11:11
|
||||
|
|
||||
LL | match *f {
|
||||
| ^^ help: consider removing the `*`: `f`
|
||||
| ^^ help: consider borrowing here: `&*f`
|
||||
LL | Foo::Foo1(num1,
|
||||
| ---- data moved here
|
||||
LL | num2) => (),
|
||||
|
@ -5,7 +5,7 @@ LL | let y = *x;
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because `*x` has type `std::boxed::Box<isize>`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `x`
|
||||
| help: consider borrowing here: `&*x`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -5,7 +5,7 @@ LL | let _x = *Rc::new("hi".to_string());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| move occurs because value has type `std::string::String`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `Rc::new("hi".to_string())`
|
||||
| help: consider borrowing here: `&*Rc::new("hi".to_string())`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -5,7 +5,7 @@ LL | *array
|
||||
| ^^^^^^
|
||||
| |
|
||||
| move occurs because `*array` has type `std::vec::Vec<Value>`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `array`
|
||||
| help: consider borrowing here: `&*array`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -5,7 +5,7 @@ LL | let a = unsafe { *mut_ref() };
|
||||
| ^^^^^^^^^^
|
||||
| |
|
||||
| move occurs because value has type `T`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `mut_ref()`
|
||||
| help: consider borrowing here: `&*mut_ref()`
|
||||
|
||||
error[E0507]: cannot move out of a shared reference
|
||||
--> $DIR/issue-20801.rs:29:22
|
||||
@ -14,7 +14,7 @@ LL | let b = unsafe { *imm_ref() };
|
||||
| ^^^^^^^^^^
|
||||
| |
|
||||
| move occurs because value has type `T`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `imm_ref()`
|
||||
| help: consider borrowing here: `&*imm_ref()`
|
||||
|
||||
error[E0507]: cannot move out of a raw pointer
|
||||
--> $DIR/issue-20801.rs:32:22
|
||||
@ -23,7 +23,7 @@ LL | let c = unsafe { *mut_ptr() };
|
||||
| ^^^^^^^^^^
|
||||
| |
|
||||
| move occurs because value has type `T`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `mut_ptr()`
|
||||
| help: consider borrowing here: `&*mut_ptr()`
|
||||
|
||||
error[E0507]: cannot move out of a raw pointer
|
||||
--> $DIR/issue-20801.rs:35:22
|
||||
@ -32,7 +32,7 @@ LL | let d = unsafe { *const_ptr() };
|
||||
| ^^^^^^^^^^^^
|
||||
| |
|
||||
| move occurs because value has type `T`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `const_ptr()`
|
||||
| help: consider borrowing here: `&*const_ptr()`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
@ -5,7 +5,7 @@ LL | let x = { *r };
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because `*r` has type `std::string::String`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `r`
|
||||
| help: consider borrowing here: `&*r`
|
||||
|
||||
error[E0507]: cannot move out of `*r` which is behind a shared reference
|
||||
--> $DIR/cannot-move-block-spans.rs:6:22
|
||||
@ -14,7 +14,7 @@ LL | let y = unsafe { *r };
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because `*r` has type `std::string::String`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `r`
|
||||
| help: consider borrowing here: `&*r`
|
||||
|
||||
error[E0507]: cannot move out of `*r` which is behind a shared reference
|
||||
--> $DIR/cannot-move-block-spans.rs:7:26
|
||||
@ -23,7 +23,7 @@ LL | let z = loop { break *r; };
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because `*r` has type `std::string::String`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `r`
|
||||
| help: consider borrowing here: `&*r`
|
||||
|
||||
error[E0508]: cannot move out of type `[std::string::String; 2]`, a non-copy array
|
||||
--> $DIR/cannot-move-block-spans.rs:11:15
|
||||
@ -62,7 +62,7 @@ LL | let x = { let mut u = 0; u += 1; *r };
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because `*r` has type `std::string::String`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `r`
|
||||
| help: consider borrowing here: `&*r`
|
||||
|
||||
error[E0507]: cannot move out of `*r` which is behind a shared reference
|
||||
--> $DIR/cannot-move-block-spans.rs:18:45
|
||||
@ -71,7 +71,7 @@ LL | let y = unsafe { let mut u = 0; u += 1; *r };
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because `*r` has type `std::string::String`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `r`
|
||||
| help: consider borrowing here: `&*r`
|
||||
|
||||
error[E0507]: cannot move out of `*r` which is behind a shared reference
|
||||
--> $DIR/cannot-move-block-spans.rs:19:49
|
||||
@ -80,7 +80,7 @@ LL | let z = loop { let mut u = 0; u += 1; break *r; u += 2; };
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because `*r` has type `std::string::String`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `r`
|
||||
| help: consider borrowing here: `&*r`
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
|
@ -5,7 +5,7 @@ LL | let b = *a;
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because `*a` has type `A`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `a`
|
||||
| help: consider borrowing here: `&*a`
|
||||
|
||||
error[E0508]: cannot move out of type `[A; 1]`, a non-copy array
|
||||
--> $DIR/move-errors.rs:12:13
|
||||
@ -24,7 +24,7 @@ LL | let s = **r;
|
||||
| ^^^
|
||||
| |
|
||||
| move occurs because `**r` has type `A`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `*r`
|
||||
| help: consider borrowing here: `&**r`
|
||||
|
||||
error[E0507]: cannot move out of an `Rc`
|
||||
--> $DIR/move-errors.rs:27:13
|
||||
@ -33,7 +33,7 @@ LL | let s = *r;
|
||||
| ^^
|
||||
| |
|
||||
| move occurs because value has type `A`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `r`
|
||||
| help: consider borrowing here: `&*r`
|
||||
|
||||
error[E0508]: cannot move out of type `[A; 1]`, a non-copy array
|
||||
--> $DIR/move-errors.rs:32:13
|
||||
@ -49,7 +49,7 @@ error[E0507]: cannot move out of `a.0` which is behind a shared reference
|
||||
--> $DIR/move-errors.rs:38:16
|
||||
|
|
||||
LL | let A(s) = *a;
|
||||
| - ^^ help: consider removing the `*`: `a`
|
||||
| - ^^ help: consider borrowing here: `&*a`
|
||||
| |
|
||||
| data moved here
|
||||
| move occurs because `s` has type `std::string::String`, which does not implement the `Copy` trait
|
||||
@ -148,7 +148,7 @@ error[E0507]: cannot move out of `x.0` which is behind a shared reference
|
||||
--> $DIR/move-errors.rs:110:11
|
||||
|
|
||||
LL | match *x {
|
||||
| ^^ help: consider removing the `*`: `x`
|
||||
| ^^ help: consider borrowing here: `&*x`
|
||||
LL |
|
||||
LL | Ok(s) | Err(s) => (),
|
||||
| -
|
||||
|
@ -5,7 +5,7 @@ LL | let x = *&x;
|
||||
| ^^^
|
||||
| |
|
||||
| move occurs because value has type `std::sync::atomic::AtomicBool`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `&x`
|
||||
| help: consider borrowing here: `&*&x`
|
||||
|
||||
error[E0507]: cannot move out of a shared reference
|
||||
--> $DIR/std-uncopyable-atomics.rs:11:13
|
||||
@ -14,7 +14,7 @@ LL | let x = *&x;
|
||||
| ^^^
|
||||
| |
|
||||
| move occurs because value has type `std::sync::atomic::AtomicIsize`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `&x`
|
||||
| help: consider borrowing here: `&*&x`
|
||||
|
||||
error[E0507]: cannot move out of a shared reference
|
||||
--> $DIR/std-uncopyable-atomics.rs:13:13
|
||||
@ -23,7 +23,7 @@ LL | let x = *&x;
|
||||
| ^^^
|
||||
| |
|
||||
| move occurs because value has type `std::sync::atomic::AtomicUsize`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `&x`
|
||||
| help: consider borrowing here: `&*&x`
|
||||
|
||||
error[E0507]: cannot move out of a shared reference
|
||||
--> $DIR/std-uncopyable-atomics.rs:15:13
|
||||
@ -32,7 +32,7 @@ LL | let x = *&x;
|
||||
| ^^^
|
||||
| |
|
||||
| move occurs because value has type `std::sync::atomic::AtomicPtr<usize>`, which does not implement the `Copy` trait
|
||||
| help: consider removing the `*`: `&x`
|
||||
| help: consider borrowing here: `&*&x`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
@ -37,26 +37,26 @@ pub fn main() {
|
||||
|
||||
let X(_t) = *s;
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION s
|
||||
if let Either::One(_t) = *r { }
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION r
|
||||
while let Either::One(_t) = *r { }
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION r
|
||||
match *r {
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION r
|
||||
Either::One(_t)
|
||||
| Either::Two(_t) => (),
|
||||
}
|
||||
match *r {
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION r
|
||||
Either::One(_t) => (),
|
||||
Either::Two(ref _t) => (),
|
||||
@ -65,26 +65,26 @@ pub fn main() {
|
||||
|
||||
let X(_t) = *sm;
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION sm
|
||||
if let Either::One(_t) = *rm { }
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION rm
|
||||
while let Either::One(_t) = *rm { }
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION rm
|
||||
match *rm {
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION rm
|
||||
Either::One(_t)
|
||||
| Either::Two(_t) => (),
|
||||
}
|
||||
match *rm {
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION rm
|
||||
Either::One(_t) => (),
|
||||
Either::Two(ref _t) => (),
|
||||
@ -92,7 +92,7 @@ pub fn main() {
|
||||
}
|
||||
match *rm {
|
||||
//~^ ERROR cannot move
|
||||
//~| HELP consider removing the `*`
|
||||
//~| HELP consider borrowing here
|
||||
//~| SUGGESTION rm
|
||||
Either::One(_t) => (),
|
||||
Either::Two(ref mut _t) => (),
|
||||
|
@ -2,7 +2,7 @@ error[E0507]: cannot move out of `s.0` which is behind a shared reference
|
||||
--> $DIR/simple.rs:38:17
|
||||
|
|
||||
LL | let X(_t) = *s;
|
||||
| -- ^^ help: consider removing the `*`: `s`
|
||||
| -- ^^ help: consider borrowing here: `&*s`
|
||||
| |
|
||||
| data moved here
|
||||
| move occurs because `_t` has type `Y`, which does not implement the `Copy` trait
|
||||
@ -11,7 +11,7 @@ error[E0507]: cannot move out of `r.0` which is behind a shared reference
|
||||
--> $DIR/simple.rs:42:30
|
||||
|
|
||||
LL | if let Either::One(_t) = *r { }
|
||||
| -- ^^ help: consider removing the `*`: `r`
|
||||
| -- ^^ help: consider borrowing here: `&*r`
|
||||
| |
|
||||
| data moved here
|
||||
| move occurs because `_t` has type `X`, which does not implement the `Copy` trait
|
||||
@ -20,7 +20,7 @@ error[E0507]: cannot move out of `r.0` which is behind a shared reference
|
||||
--> $DIR/simple.rs:46:33
|
||||
|
|
||||
LL | while let Either::One(_t) = *r { }
|
||||
| -- ^^ help: consider removing the `*`: `r`
|
||||
| -- ^^ help: consider borrowing here: `&*r`
|
||||
| |
|
||||
| data moved here
|
||||
| move occurs because `_t` has type `X`, which does not implement the `Copy` trait
|
||||
@ -29,7 +29,7 @@ error[E0507]: cannot move out of `r.0` which is behind a shared reference
|
||||
--> $DIR/simple.rs:50:11
|
||||
|
|
||||
LL | match *r {
|
||||
| ^^ help: consider removing the `*`: `r`
|
||||
| ^^ help: consider borrowing here: `&*r`
|
||||
...
|
||||
LL | Either::One(_t)
|
||||
| --
|
||||
@ -41,7 +41,7 @@ error[E0507]: cannot move out of `r.0` which is behind a shared reference
|
||||
--> $DIR/simple.rs:57:11
|
||||
|
|
||||
LL | match *r {
|
||||
| ^^ help: consider removing the `*`: `r`
|
||||
| ^^ help: consider borrowing here: `&*r`
|
||||
...
|
||||
LL | Either::One(_t) => (),
|
||||
| --
|
||||
@ -53,7 +53,7 @@ error[E0507]: cannot move out of `sm.0` which is behind a mutable reference
|
||||
--> $DIR/simple.rs:66:17
|
||||
|
|
||||
LL | let X(_t) = *sm;
|
||||
| -- ^^^ help: consider removing the `*`: `sm`
|
||||
| -- ^^^ help: consider borrowing here: `&*sm`
|
||||
| |
|
||||
| data moved here
|
||||
| move occurs because `_t` has type `Y`, which does not implement the `Copy` trait
|
||||
@ -62,7 +62,7 @@ error[E0507]: cannot move out of `rm.0` which is behind a mutable reference
|
||||
--> $DIR/simple.rs:70:30
|
||||
|
|
||||
LL | if let Either::One(_t) = *rm { }
|
||||
| -- ^^^ help: consider removing the `*`: `rm`
|
||||
| -- ^^^ help: consider borrowing here: `&*rm`
|
||||
| |
|
||||
| data moved here
|
||||
| move occurs because `_t` has type `X`, which does not implement the `Copy` trait
|
||||
@ -71,7 +71,7 @@ error[E0507]: cannot move out of `rm.0` which is behind a mutable reference
|
||||
--> $DIR/simple.rs:74:33
|
||||
|
|
||||
LL | while let Either::One(_t) = *rm { }
|
||||
| -- ^^^ help: consider removing the `*`: `rm`
|
||||
| -- ^^^ help: consider borrowing here: `&*rm`
|
||||
| |
|
||||
| data moved here
|
||||
| move occurs because `_t` has type `X`, which does not implement the `Copy` trait
|
||||
@ -80,7 +80,7 @@ error[E0507]: cannot move out of `rm.0` which is behind a mutable reference
|
||||
--> $DIR/simple.rs:78:11
|
||||
|
|
||||
LL | match *rm {
|
||||
| ^^^ help: consider removing the `*`: `rm`
|
||||
| ^^^ help: consider borrowing here: `&*rm`
|
||||
...
|
||||
LL | Either::One(_t)
|
||||
| --
|
||||
@ -92,7 +92,7 @@ error[E0507]: cannot move out of `rm.0` which is behind a mutable reference
|
||||
--> $DIR/simple.rs:85:11
|
||||
|
|
||||
LL | match *rm {
|
||||
| ^^^ help: consider removing the `*`: `rm`
|
||||
| ^^^ help: consider borrowing here: `&*rm`
|
||||
...
|
||||
LL | Either::One(_t) => (),
|
||||
| --
|
||||
@ -104,7 +104,7 @@ error[E0507]: cannot move out of `rm.0` which is behind a mutable reference
|
||||
--> $DIR/simple.rs:93:11
|
||||
|
|
||||
LL | match *rm {
|
||||
| ^^^ help: consider removing the `*`: `rm`
|
||||
| ^^^ help: consider borrowing here: `&*rm`
|
||||
...
|
||||
LL | Either::One(_t) => (),
|
||||
| --
|
||||
|
Loading…
Reference in New Issue
Block a user