Use rustfix in copy suggestion test
This commit is contained in:
parent
879efa8451
commit
f0a16b8560
@ -0,0 +1,6 @@
|
||||
// `Rc` is not ever `Copy`, we should not suggest adding `T: Copy` constraint
|
||||
fn duplicate_rc<T>(t: std::rc::Rc<T>) -> (std::rc::Rc<T>, std::rc::Rc<T>) {
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -0,0 +1,13 @@
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_clone_suggestions.rs:3:9
|
||||
|
|
||||
LL | fn duplicate_rc<T>(t: std::rc::Rc<T>) -> (std::rc::Rc<T>, std::rc::Rc<T>) {
|
||||
| - move occurs because `t` has type `Rc<T>`, which does not implement the `Copy` trait
|
||||
LL | (t, t)
|
||||
| - ^ value used here after move
|
||||
| |
|
||||
| value moved here
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0382`.
|
72
src/test/ui/moves/use_of_moved_value_copy_suggestions.fixed
Normal file
72
src/test/ui/moves/use_of_moved_value_copy_suggestions.fixed
Normal file
@ -0,0 +1,72 @@
|
||||
// run-rustfix
|
||||
#![allow(dead_code)]
|
||||
|
||||
fn duplicate_t<T: Copy>(t: T) -> (T, T) {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_opt<T: Copy>(t: Option<T>) -> (Option<T>, Option<T>) {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_tup1<T: Copy>(t: (T,)) -> ((T,), (T,)) {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_tup2<A: Copy, B: Copy>(t: (A, B)) -> ((A, B), (A, B)) {
|
||||
//~^ HELP consider restricting type parameters
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_custom<T: Trait + Copy>(t: S<T>) -> (S<T>, S<T>) {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
struct S<T>(T);
|
||||
trait Trait {}
|
||||
impl<T: Trait + Clone> Clone for S<T> {
|
||||
fn clone(&self) -> Self {
|
||||
Self(self.0.clone())
|
||||
}
|
||||
}
|
||||
impl<T: Trait + Copy> Copy for S<T> {}
|
||||
|
||||
trait A {}
|
||||
trait B {}
|
||||
|
||||
// Test where bounds are added with different bound placements
|
||||
fn duplicate_custom_1<T: Trait + Copy>(t: S<T>) -> (S<T>, S<T>) where {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_custom_2<T>(t: S<T>) -> (S<T>, S<T>)
|
||||
where
|
||||
T: A + Trait + Copy,
|
||||
//~^ HELP consider further restricting this bound
|
||||
{
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_custom_3<T>(t: S<T>) -> (S<T>, S<T>)
|
||||
where
|
||||
T: A,
|
||||
T: B, T: Trait, T: Copy
|
||||
//~^ HELP consider further restricting type parameter `T`
|
||||
{
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_custom_4<T: A>(t: S<T>) -> (S<T>, S<T>)
|
||||
where
|
||||
T: B + Trait + Copy,
|
||||
//~^ HELP consider further restricting this bound
|
||||
{
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -1,20 +1,28 @@
|
||||
// run-rustfix
|
||||
#![allow(dead_code)]
|
||||
|
||||
fn duplicate_t<T>(t: T) -> (T, T) {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_opt<T>(t: Option<T>) -> (Option<T>, Option<T>) {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_tup1<T>(t: (T,)) -> ((T,), (T,)) {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_tup2<A, B>(t: (A, B)) -> ((A, B), (A, B)) {
|
||||
//~^ HELP consider restricting type parameters
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_custom<T>(t: S<T>) -> (S<T>, S<T>) {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
@ -32,12 +40,14 @@ trait B {}
|
||||
|
||||
// Test where bounds are added with different bound placements
|
||||
fn duplicate_custom_1<T>(t: S<T>) -> (S<T>, S<T>) where {
|
||||
//~^ HELP consider restricting type parameter `T`
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn duplicate_custom_2<T>(t: S<T>) -> (S<T>, S<T>)
|
||||
where
|
||||
T: A,
|
||||
//~^ HELP consider further restricting this bound
|
||||
{
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
@ -46,6 +56,7 @@ fn duplicate_custom_3<T>(t: S<T>) -> (S<T>, S<T>)
|
||||
where
|
||||
T: A,
|
||||
T: B,
|
||||
//~^ HELP consider further restricting type parameter `T`
|
||||
{
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
@ -53,13 +64,9 @@ where
|
||||
fn duplicate_custom_4<T: A>(t: S<T>) -> (S<T>, S<T>)
|
||||
where
|
||||
T: B,
|
||||
//~^ HELP consider further restricting this bound
|
||||
{
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
// `Rc` is not ever `Copy`, we should not suggest adding `T: Copy` constraint
|
||||
fn duplicate_rc<T>(t: std::rc::Rc<T>) -> (std::rc::Rc<T>, std::rc::Rc<T>) {
|
||||
(t, t) //~ use of moved value: `t`
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -1,8 +1,9 @@
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:2:9
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:6:9
|
||||
|
|
||||
LL | fn duplicate_t<T>(t: T) -> (T, T) {
|
||||
| - move occurs because `t` has type `T`, which does not implement the `Copy` trait
|
||||
LL |
|
||||
LL | (t, t)
|
||||
| - ^ value used here after move
|
||||
| |
|
||||
@ -14,10 +15,11 @@ LL | fn duplicate_t<T: Copy>(t: T) -> (T, T) {
|
||||
| ++++++
|
||||
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:6:9
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:11:9
|
||||
|
|
||||
LL | fn duplicate_opt<T>(t: Option<T>) -> (Option<T>, Option<T>) {
|
||||
| - move occurs because `t` has type `Option<T>`, which does not implement the `Copy` trait
|
||||
LL |
|
||||
LL | (t, t)
|
||||
| - ^ value used here after move
|
||||
| |
|
||||
@ -29,10 +31,11 @@ LL | fn duplicate_opt<T: Copy>(t: Option<T>) -> (Option<T>, Option<T>) {
|
||||
| ++++++
|
||||
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:10:9
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:16:9
|
||||
|
|
||||
LL | fn duplicate_tup1<T>(t: (T,)) -> ((T,), (T,)) {
|
||||
| - move occurs because `t` has type `(T,)`, which does not implement the `Copy` trait
|
||||
LL |
|
||||
LL | (t, t)
|
||||
| - ^ value used here after move
|
||||
| |
|
||||
@ -44,10 +47,11 @@ LL | fn duplicate_tup1<T: Copy>(t: (T,)) -> ((T,), (T,)) {
|
||||
| ++++++
|
||||
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:14:9
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:21:9
|
||||
|
|
||||
LL | fn duplicate_tup2<A, B>(t: (A, B)) -> ((A, B), (A, B)) {
|
||||
| - move occurs because `t` has type `(A, B)`, which does not implement the `Copy` trait
|
||||
LL |
|
||||
LL | (t, t)
|
||||
| - ^ value used here after move
|
||||
| |
|
||||
@ -59,10 +63,11 @@ LL | fn duplicate_tup2<A: Copy, B: Copy>(t: (A, B)) -> ((A, B), (A, B)) {
|
||||
| ++++++ ++++++
|
||||
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:18:9
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:26:9
|
||||
|
|
||||
LL | fn duplicate_custom<T>(t: S<T>) -> (S<T>, S<T>) {
|
||||
| - move occurs because `t` has type `S<T>`, which does not implement the `Copy` trait
|
||||
LL |
|
||||
LL | (t, t)
|
||||
| - ^ value used here after move
|
||||
| |
|
||||
@ -74,10 +79,11 @@ LL | fn duplicate_custom<T: Trait + Copy>(t: S<T>) -> (S<T>, S<T>) {
|
||||
| ++++++++++++++
|
||||
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:35:9
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:44:9
|
||||
|
|
||||
LL | fn duplicate_custom_1<T>(t: S<T>) -> (S<T>, S<T>) where {
|
||||
| - move occurs because `t` has type `S<T>`, which does not implement the `Copy` trait
|
||||
LL |
|
||||
LL | (t, t)
|
||||
| - ^ value used here after move
|
||||
| |
|
||||
@ -89,7 +95,7 @@ LL | fn duplicate_custom_1<T: Trait + Copy>(t: S<T>) -> (S<T>, S<T>) where {
|
||||
| ++++++++++++++
|
||||
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:42:9
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:52:9
|
||||
|
|
||||
LL | fn duplicate_custom_2<T>(t: S<T>) -> (S<T>, S<T>)
|
||||
| - move occurs because `t` has type `S<T>`, which does not implement the `Copy` trait
|
||||
@ -105,7 +111,7 @@ LL | T: A + Trait + Copy,
|
||||
| ++++++++++++++
|
||||
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:50:9
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:61:9
|
||||
|
|
||||
LL | fn duplicate_custom_3<T>(t: S<T>) -> (S<T>, S<T>)
|
||||
| - move occurs because `t` has type `S<T>`, which does not implement the `Copy` trait
|
||||
@ -121,7 +127,7 @@ LL | T: B, T: Trait, T: Copy
|
||||
| ~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:57:9
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:69:9
|
||||
|
|
||||
LL | fn duplicate_custom_4<T: A>(t: S<T>) -> (S<T>, S<T>)
|
||||
| - move occurs because `t` has type `S<T>`, which does not implement the `Copy` trait
|
||||
@ -136,16 +142,6 @@ help: consider further restricting this bound
|
||||
LL | T: B + Trait + Copy,
|
||||
| ++++++++++++++
|
||||
|
||||
error[E0382]: use of moved value: `t`
|
||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:62:9
|
||||
|
|
||||
LL | fn duplicate_rc<T>(t: std::rc::Rc<T>) -> (std::rc::Rc<T>, std::rc::Rc<T>) {
|
||||
| - move occurs because `t` has type `Rc<T>`, which does not implement the `Copy` trait
|
||||
LL | (t, t)
|
||||
| - ^ value used here after move
|
||||
| |
|
||||
| value moved here
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0382`.
|
||||
|
Loading…
x
Reference in New Issue
Block a user