diff options
| author | Michael Howell <michael@notriddle.com> | 2021-09-07 00:49:43 -0700 |
|---|---|---|
| committer | Michael Howell <michael@notriddle.com> | 2021-09-07 00:51:27 -0700 |
| commit | d6ff916c2fe6a47f52fc14e4f6d85e92d07e5e76 (patch) | |
| tree | c71f67c7495ad3305810ad848fb2e3ae21b16842 | |
| parent | f23003dff12fdb6c3ba09a55b1323cd2692e50d1 (diff) | |
| download | rust-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.rs | 9 | ||||
| -rw-r--r-- | src/test/ui/suggestions/slice-issue-87994.stderr | 36 |
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`. |
