+// 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};
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);
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) {
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;
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())
+ }
}