about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tests/ui/manual_memcpy/with_loop_counters.rs17
-rw-r--r--tests/ui/manual_memcpy/with_loop_counters.stderr17
2 files changed, 30 insertions, 4 deletions
diff --git a/tests/ui/manual_memcpy/with_loop_counters.rs b/tests/ui/manual_memcpy/with_loop_counters.rs
index 70873c9e994..ba388a05a28 100644
--- a/tests/ui/manual_memcpy/with_loop_counters.rs
+++ b/tests/ui/manual_memcpy/with_loop_counters.rs
@@ -37,6 +37,12 @@ pub fn manual_copy_with_counters(src: &[i32], dst: &mut [i32], dst2: &mut [i32])
         count += 1;
     }
 
+    let mut count = 2;
+    for i in 0..dst.len() {
+        dst[i] = src[count];
+        count += 1;
+    }
+
     let mut count = 5;
     for i in 3..10 {
         dst[i] = src[count];
@@ -66,6 +72,17 @@ pub fn manual_copy_with_counters(src: &[i32], dst: &mut [i32], dst2: &mut [i32])
         dst[i] = src[count];
         count += 1
     }
+
+    // make sure ones where the increment is not at the end of the loop.
+    // As a possible enhancement, one could adjust the offset in the suggestion according to
+    // the position. For example, if the increment is at the top of the loop;
+    // treating the loop counter as if it were initialized 1 greater than the original value.
+    let mut count = 0;
+    #[allow(clippy::needless_range_loop)]
+    for i in 0..src.len() {
+        count += 1;
+        dst[i] = src[count];
+    }
 }
 
 fn main() {}
diff --git a/tests/ui/manual_memcpy/with_loop_counters.stderr b/tests/ui/manual_memcpy/with_loop_counters.stderr
index 598c881b4d6..2547b19f5d1 100644
--- a/tests/ui/manual_memcpy/with_loop_counters.stderr
+++ b/tests/ui/manual_memcpy/with_loop_counters.stderr
@@ -57,6 +57,15 @@ LL | |     }
 error: it looks like you're manually copying between slices
   --> $DIR/with_loop_counters.rs:41:5
    |
+LL | /     for i in 0..dst.len() {
+LL | |         dst[i] = src[count];
+LL | |         count += 1;
+LL | |     }
+   | |_____^ help: try replacing the loop by: `dst.clone_from_slice(&src[2..(dst.len() + 2)]);`
+
+error: it looks like you're manually copying between slices
+  --> $DIR/with_loop_counters.rs:47:5
+   |
 LL | /     for i in 3..10 {
 LL | |         dst[i] = src[count];
 LL | |         count += 1;
@@ -64,7 +73,7 @@ LL | |     }
    | |_____^ help: try replacing the loop by: `dst[3..10].clone_from_slice(&src[5..(10 + 5 - 3)]);`
 
 error: it looks like you're manually copying between slices
-  --> $DIR/with_loop_counters.rs:48:5
+  --> $DIR/with_loop_counters.rs:54:5
    |
 LL | /     for i in 0..src.len() {
 LL | |         dst[count] = src[i];
@@ -81,7 +90,7 @@ LL |     dst2[30..(src.len() + 30)].clone_from_slice(&src[..]);
    |
 
 error: it looks like you're manually copying between slices
-  --> $DIR/with_loop_counters.rs:58:5
+  --> $DIR/with_loop_counters.rs:64:5
    |
 LL | /     for i in 0..1 << 1 {
 LL | |         dst[count] = src[i + 2];
@@ -90,7 +99,7 @@ LL | |     }
    | |_____^ help: try replacing the loop by: `dst[(0 << 1)..((1 << 1) + (0 << 1))].clone_from_slice(&src[2..((1 << 1) + 2)]);`
 
 error: it looks like you're manually copying between slices
-  --> $DIR/with_loop_counters.rs:65:5
+  --> $DIR/with_loop_counters.rs:71:5
    |
 LL | /     for i in 3..src.len() {
 LL | |         dst[i] = src[count];
@@ -98,5 +107,5 @@ LL | |         count += 1
 LL | |     }
    | |_____^ help: try replacing the loop by: `dst[3..src.len()].clone_from_slice(&src[..(src.len() - 3)]);`
 
-error: aborting due to 10 previous errors
+error: aborting due to 11 previous errors