diff options
Diffstat (limited to 'src/test/ui/moves/use_of_moved_value_copy_suggestions.rs')
-rw-r--r-- | src/test/ui/moves/use_of_moved_value_copy_suggestions.rs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/test/ui/moves/use_of_moved_value_copy_suggestions.rs b/src/test/ui/moves/use_of_moved_value_copy_suggestions.rs new file mode 100644 index 000000000..0a43dd1a9 --- /dev/null +++ b/src/test/ui/moves/use_of_moved_value_copy_suggestions.rs @@ -0,0 +1,86 @@ +// 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` +} + +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>(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` +} + +fn duplicate_custom_3<T>(t: S<T>) -> (S<T>, S<T>) +where + T: A, + //~^ HELP consider further restricting this bound + T: B, +{ + (t, t) //~ use of moved value: `t` +} + +fn duplicate_custom_4<T: A>(t: S<T>) -> (S<T>, S<T>) +//~^ HELP consider further restricting this bound +where + T: B, +{ + (t, t) //~ use of moved value: `t` +} + +#[rustfmt::skip] +fn existing_colon<T:>(t: T) { + //~^ HELP consider restricting type parameter `T` + [t, t]; //~ use of moved value: `t` +} + +fn existing_colon_in_where<T>(t: T) +where + T:, + //~^ HELP consider further restricting type parameter `T` +{ + [t, t]; //~ use of moved value: `t` +} + +fn main() {} |