9d2eb66e1a
When encountering a for loop that is rejected by the borrow checker because it is being advanced within its body, provide a structured suggestion for `while let Some(pat) = iter.next()`.
79 lines
3.1 KiB
Plaintext
79 lines
3.1 KiB
Plaintext
error[E0499]: cannot borrow `chars` as mutable more than once at a time
|
|
--> $DIR/issue-102972.rs:6:9
|
|
|
|
|
LL | for _c in chars.by_ref() {
|
|
| --------------
|
|
| |
|
|
| first mutable borrow occurs here
|
|
| first borrow later used here
|
|
LL | chars.next();
|
|
| ^^^^^ second mutable borrow occurs here
|
|
|
|
|
= note: a for loop advances the iterator for you, the result is stored in `_c`
|
|
help: if you want to call `next` on a iterator within the loop, consider using `while let`
|
|
|
|
|
LL ~ let iter = chars.by_ref();
|
|
LL ~ while let Some(_c) = iter.next() {
|
|
LL ~ iter.next();
|
|
|
|
|
|
|
error[E0382]: borrow of moved value: `iter`
|
|
--> $DIR/issue-102972.rs:14:9
|
|
|
|
|
LL | let mut iter = v.iter();
|
|
| -------- move occurs because `iter` has type `std::slice::Iter<'_, i32>`, which does not implement the `Copy` trait
|
|
LL | for _i in iter {
|
|
| ---- `iter` moved due to this implicit call to `.into_iter()`
|
|
LL | iter.next();
|
|
| ^^^^ value borrowed here after move
|
|
|
|
|
= note: a for loop advances the iterator for you, the result is stored in `_i`
|
|
note: `into_iter` takes ownership of the receiver `self`, which moves `iter`
|
|
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
|
|
help: if you want to call `next` on a iterator within the loop, consider using `while let`
|
|
|
|
|
LL | while let Some(_i) = iter.next() {
|
|
| ~~~~~~~~~~~~~~~ ~~~ +++++++
|
|
|
|
error[E0499]: cannot borrow `i` as mutable more than once at a time
|
|
--> $DIR/issue-102972.rs:22:9
|
|
|
|
|
LL | for () in i.by_ref() {
|
|
| ----------
|
|
| |
|
|
| first mutable borrow occurs here
|
|
| first borrow later used here
|
|
LL | i.next();
|
|
| ^ second mutable borrow occurs here
|
|
|
|
|
= note: a for loop advances the iterator for you, the result is stored in its pattern
|
|
help: if you want to call `next` on a iterator within the loop, consider using `while let`
|
|
|
|
|
LL ~ let iter = i.by_ref();
|
|
LL ~ while let Some(()) = iter.next() {
|
|
LL ~ iter.next();
|
|
|
|
|
|
|
error[E0382]: borrow of moved value: `iter`
|
|
--> $DIR/issue-102972.rs:30:9
|
|
|
|
|
LL | let mut iter = v.iter();
|
|
| -------- move occurs because `iter` has type `std::slice::Iter<'_, ()>`, which does not implement the `Copy` trait
|
|
LL | for () in iter {
|
|
| ---- `iter` moved due to this implicit call to `.into_iter()`
|
|
LL | iter.next();
|
|
| ^^^^ value borrowed here after move
|
|
|
|
|
= note: a for loop advances the iterator for you, the result is stored in its pattern
|
|
note: `into_iter` takes ownership of the receiver `self`, which moves `iter`
|
|
--> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
|
|
help: if you want to call `next` on a iterator within the loop, consider using `while let`
|
|
|
|
|
LL | while let Some(()) = iter.next() {
|
|
| ~~~~~~~~~~~~~~~ ~~~ +++++++
|
|
|
|
error: aborting due to 4 previous errors
|
|
|
|
Some errors have detailed explanations: E0382, E0499.
|
|
For more information about an error, try `rustc --explain E0382`.
|