1 #![warn(clippy::clone_on_ref_ptr)]
4 use std::cell::RefCell;
5 use std::collections::HashSet;
6 use std::collections::VecDeque;
7 use std::rc::{self, Rc};
8 use std::sync::{self, Arc};
12 impl SomeTrait for SomeImpl {}
19 vec![1].clone(); // ok, not a Copy type
20 Some(vec![1]).clone(); // ok, not a Copy type
23 let rc = RefCell::new(0);
27 fn clone_on_ref_ptr() {
28 let rc = Rc::new(true);
29 let arc = Arc::new(true);
31 let rcweak = Rc::downgrade(&rc);
32 let arc_weak = Arc::downgrade(&arc);
41 rc::Weak::clone(&rcweak);
44 sync::Weak::clone(&arc_weak);
46 let x = Arc::new(SomeImpl);
47 let _: Arc<SomeTrait> = x.clone();
50 fn clone_on_copy_generic<T: Copy>(t: T) {
56 fn clone_on_double_ref() {
59 let z: &Vec<_> = y.clone();
61 println!("{:p} {:p}", *y, z);
64 fn iter_clone_collect() {
65 let v = [1, 2, 3, 4, 5];
66 let v2: Vec<isize> = v.iter().cloned().collect();
67 let v3: HashSet<isize> = v.iter().cloned().collect();
68 let v4: VecDeque<isize> = v.iter().cloned().collect();
70 // Handle macro expansion in suggestion
71 let _: Vec<isize> = vec![1, 2, 3].iter().cloned().collect();
75 let _: Vec<u8> = std::ffi::CStr::from_ptr(std::ptr::null())
88 #[derive(Copy, Clone)]
91 macro_rules! impl_deref {
92 ($src:ident, $dst:ident) => {
93 impl std::ops::Deref for $src {
95 fn deref(&self) -> &Self::Target {
105 impl std::ops::Deref for D {
106 type Target = &'static E;
107 fn deref(&self) -> &Self::Target {
114 let _: E = a.clone();