]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/unnecessary_clone.rs
Auto merge of #9684 - kraktus:ref_option_ref, r=xFrednet
[rust.git] / tests / ui / unnecessary_clone.rs
index fee6b30a97b6c696b7354a569bafa71175ffb57e..8b1629b19a76900e9e4ab001df47bfa34d99ac54 100644 (file)
@@ -1,9 +1,9 @@
+// does not test any rustfixable lints
 #![warn(clippy::clone_on_ref_ptr)]
 #![allow(unused)]
+#![allow(clippy::redundant_clone, clippy::uninlined_format_args, clippy::unnecessary_wraps)]
 
 use std::cell::RefCell;
-use std::collections::HashSet;
-use std::collections::VecDeque;
 use std::rc::{self, Rc};
 use std::sync::{self, Arc};
 
@@ -13,17 +13,6 @@ impl SomeTrait for SomeImpl {}
 
 fn main() {}
 
-fn clone_on_copy() {
-    42.clone();
-
-    vec![1].clone(); // ok, not a Copy type
-    Some(vec![1]).clone(); // ok, not a Copy type
-    (&42).clone();
-
-    let rc = RefCell::new(0);
-    rc.borrow().clone();
-}
-
 fn clone_on_ref_ptr() {
     let rc = Rc::new(true);
     let arc = Arc::new(true);
@@ -44,7 +33,7 @@ fn clone_on_ref_ptr() {
     sync::Weak::clone(&arc_weak);
 
     let x = Arc::new(SomeImpl);
-    let _: Arc<SomeTrait> = x.clone();
+    let _: Arc<dyn SomeTrait> = x.clone();
 }
 
 fn clone_on_copy_generic<T: Copy>(t: T) {
@@ -61,13 +50,6 @@ fn clone_on_double_ref() {
     println!("{:p} {:p}", *y, z);
 }
 
-fn iter_clone_collect() {
-    let v = [1, 2, 3, 4, 5];
-    let v2: Vec<isize> = v.iter().cloned().collect();
-    let v3: HashSet<isize> = v.iter().cloned().collect();
-    let v4: VecDeque<isize> = v.iter().cloned().collect();
-}
-
 mod many_derefs {
     struct A;
     struct B;
@@ -102,4 +84,27 @@ fn go1() {
         let _: E = a.clone();
         let _: E = *****a;
     }
+
+    fn check(mut encoded: &[u8]) {
+        let _ = &mut encoded.clone();
+        let _ = &encoded.clone();
+    }
+}
+
+mod issue2076 {
+    use std::rc::Rc;
+
+    macro_rules! try_opt {
+        ($expr: expr) => {
+            match $expr {
+                Some(value) => value,
+                None => return None,
+            }
+        };
+    }
+
+    fn func() -> Option<Rc<u8>> {
+        let rc = Rc::new(42);
+        Some(try_opt!(Some(rc)).clone())
+    }
 }