diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-03-14 16:09:47 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-03-24 11:46:13 -0700 |
| commit | ae883dc82641c9c80d6dc09926a12b984f76d579 (patch) | |
| tree | f501181ab5bee319d85baa9f70d693c6aa003b59 /src/test/ui/suggestions | |
| parent | c7b5f4d0f7ccf5d40168f541d4418bb76d9cb513 (diff) | |
| download | rust-ae883dc82641c9c80d6dc09926a12b984f76d579.tar.gz rust-ae883dc82641c9c80d6dc09926a12b984f76d579.zip | |
When moving out of a for loop head, suggest borrowing it
When encountering code like the following, suggest borrowing the for loop
head to avoid moving it into the for loop pattern:
```
fn main() {
let a = vec![1, 2, 3];
for i in &a {
for j in a {
println!("{} * {} = {}", i, j, i * j);
}
}
}
```
Diffstat (limited to 'src/test/ui/suggestions')
| -rw-r--r-- | src/test/ui/suggestions/borrow-for-loop-head.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/suggestions/borrow-for-loop-head.stderr | 24 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/borrow-for-loop-head.rs b/src/test/ui/suggestions/borrow-for-loop-head.rs new file mode 100644 index 00000000000..c2bda55e589 --- /dev/null +++ b/src/test/ui/suggestions/borrow-for-loop-head.rs @@ -0,0 +1,10 @@ +fn main() { + let a = vec![1, 2, 3]; + for i in &a { + for j in a { + //~^ ERROR cannot move out of `a` because it is borrowed + //~| ERROR use of moved value: `a` + println!("{} * {} = {}", i, j, i * j); + } + } +} diff --git a/src/test/ui/suggestions/borrow-for-loop-head.stderr b/src/test/ui/suggestions/borrow-for-loop-head.stderr new file mode 100644 index 00000000000..17ac3fe86d0 --- /dev/null +++ b/src/test/ui/suggestions/borrow-for-loop-head.stderr @@ -0,0 +1,24 @@ +error[E0505]: cannot move out of `a` because it is borrowed + --> $DIR/borrow-for-loop-head.rs:4:18 + | +LL | for i in &a { + | - borrow of `a` occurs here +LL | for j in a { + | ^ move out of `a` occurs here + +error[E0382]: use of moved value: `a` + --> $DIR/borrow-for-loop-head.rs:4:18 + | +LL | for j in a { + | ^ value moved here in previous iteration of loop + | + = note: move occurs because `a` has type `std::vec::Vec<i32>`, which does not implement the `Copy` trait +help: consider borrowing this to avoid moving it into the for loop + | +LL | for j in &a { + | ^^ + +error: aborting due to 2 previous errors + +Some errors occurred: E0382, E0505. +For more information about an error, try `rustc --explain E0382`. |
