]> git.lizzy.rs Git - rust.git/blob - tests/ui/unnecessary_clone.rs
Adapt the *.stderr files of the ui-tests to the tool_lints
[rust.git] / tests / ui / unnecessary_clone.rs
1 #![feature(tool_lints)]
2
3 #![warn(clippy::clone_on_ref_ptr)]
4 #![allow(unused)]
5
6 use std::collections::HashSet;
7 use std::collections::VecDeque;
8 use std::rc::{self, Rc};
9 use std::sync::{self, Arc};
10
11 trait SomeTrait {}
12 struct SomeImpl;
13 impl SomeTrait for SomeImpl {}
14
15 fn main() {}
16
17 fn clone_on_copy() {
18     42.clone();
19
20     vec![1].clone(); // ok, not a Copy type
21     Some(vec![1]).clone(); // ok, not a Copy type
22     (&42).clone();
23 }
24
25 fn clone_on_ref_ptr() {
26     let rc = Rc::new(true);
27     let arc = Arc::new(true);
28
29     let rcweak = Rc::downgrade(&rc);
30     let arc_weak = Arc::downgrade(&arc);
31
32     rc.clone();
33     Rc::clone(&rc);
34
35     arc.clone();
36     Arc::clone(&arc);
37
38     rcweak.clone();
39     rc::Weak::clone(&rcweak);
40
41     arc_weak.clone();
42     sync::Weak::clone(&arc_weak);
43
44     let x = Arc::new(SomeImpl);
45     let _: Arc<SomeTrait> = x.clone();
46 }
47
48 fn clone_on_copy_generic<T: Copy>(t: T) {
49     t.clone();
50
51     Some(t).clone();
52 }
53
54 fn clone_on_double_ref() {
55     let x = vec![1];
56     let y = &&x;
57     let z: &Vec<_> = y.clone();
58
59     println!("{:p} {:p}",*y, z);
60 }
61
62 fn iter_clone_collect() {
63     let v = [1,2,3,4,5];
64     let v2 : Vec<isize> = v.iter().cloned().collect();
65     let v3 : HashSet<isize> = v.iter().cloned().collect();
66     let v4 : VecDeque<isize> = v.iter().cloned().collect();
67 }