1 // does not test any rustfixable lints
3 #![warn(clippy::clone_on_ref_ptr)]
4 #![allow(unused, clippy::redundant_clone, clippy::unnecessary_wraps)]
6 use std::cell::RefCell;
7 use std::rc::{self, Rc};
8 use std::sync::{self, Arc};
12 impl SomeTrait for SomeImpl {}
16 fn clone_on_ref_ptr() {
17 let rc = Rc::new(true);
18 let arc = Arc::new(true);
20 let rcweak = Rc::downgrade(&rc);
21 let arc_weak = Arc::downgrade(&arc);
30 rc::Weak::clone(&rcweak);
33 sync::Weak::clone(&arc_weak);
35 let x = Arc::new(SomeImpl);
36 let _: Arc<dyn SomeTrait> = x.clone();
39 fn clone_on_copy_generic<T: Copy>(t: T) {
45 fn clone_on_double_ref() {
48 let z: &Vec<_> = y.clone();
50 println!("{:p} {:p}", *y, z);
58 #[derive(Copy, Clone)]
61 macro_rules! impl_deref {
62 ($src:ident, $dst:ident) => {
63 impl std::ops::Deref for $src {
65 fn deref(&self) -> &Self::Target {
75 impl std::ops::Deref for D {
76 type Target = &'static E;
77 fn deref(&self) -> &Self::Target {
88 fn check(mut encoded: &[u8]) {
89 let _ = &mut encoded.clone();
90 let _ = &encoded.clone();
97 macro_rules! try_opt {
100 Some(value) => value,
106 fn func() -> Option<Rc<u8>> {
107 let rc = Rc::new(42);
108 Some(try_opt!(Some(rc)).clone())