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