about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2021-09-07 00:49:43 -0700
committerMichael Howell <michael@notriddle.com>2021-09-07 00:51:27 -0700
commitd6ff916c2fe6a47f52fc14e4f6d85e92d07e5e76 (patch)
treec71f67c7495ad3305810ad848fb2e3ae21b16842
parentf23003dff12fdb6c3ba09a55b1323cd2692e50d1 (diff)
downloadrust-d6ff916c2fe6a47f52fc14e4f6d85e92d07e5e76.tar.gz
rust-d6ff916c2fe6a47f52fc14e4f6d85e92d07e5e76.zip
test: add case for mutating iterator
Note that this incorrectly suggests a shared borrow,
but at least we know it's happening.
-rw-r--r--src/test/ui/suggestions/slice-issue-87994.rs9
-rw-r--r--src/test/ui/suggestions/slice-issue-87994.stderr36
2 files changed, 44 insertions, 1 deletions
diff --git a/src/test/ui/suggestions/slice-issue-87994.rs b/src/test/ui/suggestions/slice-issue-87994.rs
index 98a936ab2fd..ecb7f54ea25 100644
--- a/src/test/ui/suggestions/slice-issue-87994.rs
+++ b/src/test/ui/suggestions/slice-issue-87994.rs
@@ -4,4 +4,13 @@ fn main() {
     //~^ ERROR [i32]` is not an iterator [E0277]
     //~^^ ERROR known at compilation time
   }
+  struct K {
+    n: i32,
+  }
+  let mut v2 = vec![K { n: 1 }, K { n: 1 }, K { n: 1 }];
+  for i2 in v2[1..] {
+    //~^ ERROR [K]` is not an iterator [E0277]
+    //~^^ ERROR known at compilation time
+    i2.n = 2;
+  }
 }
diff --git a/src/test/ui/suggestions/slice-issue-87994.stderr b/src/test/ui/suggestions/slice-issue-87994.stderr
index 0c69bec2210..018f62e783d 100644
--- a/src/test/ui/suggestions/slice-issue-87994.stderr
+++ b/src/test/ui/suggestions/slice-issue-87994.stderr
@@ -32,6 +32,40 @@ note: required by `into_iter`
 LL |     fn into_iter(self) -> Self::IntoIter;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error: aborting due to 2 previous errors
+error[E0277]: the size for values of type `[K]` cannot be known at compilation time
+  --> $DIR/slice-issue-87994.rs:11:13
+   |
+LL |   for i2 in v2[1..] {
+   |             ^^^^^^^
+   |             |
+   |             expected an implementor of trait `IntoIterator`
+   |             help: consider borrowing here: `&v2[1..]`
+   |
+   = note: the trait bound `[K]: IntoIterator` is not satisfied
+   = note: required because of the requirements on the impl of `IntoIterator` for `[K]`
+note: required by `into_iter`
+  --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
+   |
+LL |     fn into_iter(self) -> Self::IntoIter;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0277]: `[K]` is not an iterator
+  --> $DIR/slice-issue-87994.rs:11:13
+   |
+LL |   for i2 in v2[1..] {
+   |             ^^^^^^^
+   |             |
+   |             expected an implementor of trait `IntoIterator`
+   |             help: consider borrowing here: `&v2[1..]`
+   |
+   = note: the trait bound `[K]: IntoIterator` is not satisfied
+   = note: required because of the requirements on the impl of `IntoIterator` for `[K]`
+note: required by `into_iter`
+  --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
+   |
+LL |     fn into_iter(self) -> Self::IntoIter;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
 
 For more information about this error, try `rustc --explain E0277`.