diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2021-04-07 13:07:17 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-07 13:07:17 +0200 |
| commit | d7d42ccfd254dca9923bca63b008423dc4e0f83d (patch) | |
| tree | fc12b3db17212c201f0303b2fd65a6e355f2320a /src/test | |
| parent | 9c688cd2a2935ae4645c0b878f1f40ea51e98816 (diff) | |
| parent | a77598434838376141c8cb25fe29693b3a26b173 (diff) | |
| download | rust-d7d42ccfd254dca9923bca63b008423dc4e0f83d.tar.gz rust-d7d42ccfd254dca9923bca63b008423dc4e0f83d.zip | |
Rollup merge of #83945 - SkiFire13:fix-83924, r=estebank
Add suggestion to reborrow mutable references when they're moved in a for loop Address #83924
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/issues/issue-83924.fixed | 20 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-83924.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-83924.stderr | 25 |
3 files changed, 65 insertions, 0 deletions
diff --git a/src/test/ui/issues/issue-83924.fixed b/src/test/ui/issues/issue-83924.fixed new file mode 100644 index 00000000000..aa40da12b87 --- /dev/null +++ b/src/test/ui/issues/issue-83924.fixed @@ -0,0 +1,20 @@ +// run-rustfix + +fn main() { + let mut values = vec![10, 11, 12]; + let v = &mut values; + + let mut max = 0; + + for n in &mut *v { + max = std::cmp::max(max, *n); + } + + println!("max is {}", max); + println!("Converting to percentages of maximum value..."); + for n in v { + //~^ ERROR: use of moved value: `v` [E0382] + *n = 100 * (*n) / max; + } + println!("values: {:#?}", values); +} diff --git a/src/test/ui/issues/issue-83924.rs b/src/test/ui/issues/issue-83924.rs new file mode 100644 index 00000000000..22b80fe2f38 --- /dev/null +++ b/src/test/ui/issues/issue-83924.rs @@ -0,0 +1,20 @@ +// run-rustfix + +fn main() { + let mut values = vec![10, 11, 12]; + let v = &mut values; + + let mut max = 0; + + for n in v { + max = std::cmp::max(max, *n); + } + + println!("max is {}", max); + println!("Converting to percentages of maximum value..."); + for n in v { + //~^ ERROR: use of moved value: `v` [E0382] + *n = 100 * (*n) / max; + } + println!("values: {:#?}", values); +} diff --git a/src/test/ui/issues/issue-83924.stderr b/src/test/ui/issues/issue-83924.stderr new file mode 100644 index 00000000000..682bc323cb0 --- /dev/null +++ b/src/test/ui/issues/issue-83924.stderr @@ -0,0 +1,25 @@ +error[E0382]: use of moved value: `v` + --> $DIR/issue-83924.rs:15:14 + | +LL | let v = &mut values; + | - move occurs because `v` has type `&mut Vec<i32>`, which does not implement the `Copy` trait +... +LL | for n in v { + | - `v` moved due to this implicit call to `.into_iter()` +... +LL | for n in v { + | ^ value used here after move + | +note: this function takes ownership of the receiver `self`, which moves `v` + --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL + | +LL | fn into_iter(self) -> Self::IntoIter; + | ^^^^ +help: consider creating a fresh reborrow of `v` here + | +LL | for n in &mut *v { + | ^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0382`. |
