1 #![warn(clippy::needless_range_loop, clippy::manual_memcpy)]
3 const LOOP_OFFSET: usize = 5000;
5 pub fn manual_copy(src: &[i32], dst: &mut [i32], dst2: &mut [i32]) {
7 for i in 0..src.len() {
12 for i in 0..src.len() {
17 for i in 0..src.len() {
22 for i in 11..src.len() {
26 // overwrite entire dst
27 for i in 0..dst.len() {
31 // manual copy with branch - can't easily convert to memcpy!
32 for i in 0..src.len() {
39 // multiple copies - suggest two memcpy statements
42 dst2[i + 500] = src[i]
45 // this is a reversal - the copy lint shouldn't be triggered
46 for i in 10..LOOP_OFFSET {
47 dst[i + LOOP_OFFSET] = src[LOOP_OFFSET - i];
52 for i in 10..LOOP_OFFSET {
53 dst[i + LOOP_OFFSET] = src[i - some_var];
56 // Non continuous copy - don't trigger lint
61 let src_vec = vec![1, 2, 3, 4, 5];
62 let mut dst_vec = vec![0, 0, 0, 0, 0];
64 // make sure vectors are supported
65 for i in 0..src_vec.len() {
66 dst_vec[i] = src_vec[i];
69 // lint should not trigger when either
70 // source or destination type is not
71 // slice-like, like DummyStruct
72 struct DummyStruct(i32);
74 impl ::std::ops::Index<usize> for DummyStruct {
77 fn index(&self, _: usize) -> &i32 {
82 let src = DummyStruct(5);
83 let mut dst_vec = vec![0; 10];
89 // Simplify suggestion (issue #3004)
90 let src = [0, 1, 2, 3, 4];
91 let mut dst = [0, 0, 0, 0, 0, 0];
94 for i in from..from + src.len() {
95 dst[i] = src[i - from];
98 for i in from..from + 3 {
99 dst[i] = src[i - from];
103 #[warn(clippy::needless_range_loop, clippy::manual_memcpy)]
104 pub fn manual_clone(src: &[String], dst: &mut [String]) {
105 for i in 0..src.len() {
106 dst[i] = src[i].clone();