diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2024-02-26 20:06:19 +0000 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2024-03-17 21:32:26 +0000 |
| commit | 14473adf425623268252a4d10b5dd0d4f458daad (patch) | |
| tree | 8a75e9698a57f8c55a47544c3dc49ac07e34753c /compiler/rustc_mir_transform/src/coverage/counters.rs | |
| parent | 22e241e32e1331aab358ac2843ec63d4cc4ea9f4 (diff) | |
| download | rust-14473adf425623268252a4d10b5dd0d4f458daad.tar.gz rust-14473adf425623268252a4d10b5dd0d4f458daad.zip | |
Detect when move of `!Copy` value occurs within `loop` and should likely not be cloned
When encountering a move error on a value within a loop of any kind,
identify if the moved value belongs to a call expression that should not
be cloned and avoid the semantically incorrect suggestion. Also try to
suggest moving the call expression outside of the loop instead.
```
error[E0382]: use of moved value: `vec`
--> $DIR/recreating-value-in-loop-condition.rs:6:33
|
LL | let vec = vec!["one", "two", "three"];
| --- move occurs because `vec` has type `Vec<&str>`, which does not implement the `Copy` trait
LL | while let Some(item) = iter(vec).next() {
| ----------------------------^^^--------
| | |
| | value moved here, in previous iteration of loop
| inside of this loop
|
note: consider changing this parameter type in function `iter` to borrow instead if owning the value isn't necessary
--> $DIR/recreating-value-in-loop-condition.rs:1:17
|
LL | fn iter<T>(vec: Vec<T>) -> impl Iterator<Item = T> {
| ---- ^^^^^^ this parameter takes ownership of the value
| |
| in this function
help: consider moving the expression out of the loop so it is only moved once
|
LL ~ let mut value = iter(vec);
LL ~ while let Some(item) = value.next() {
|
```
We use the presence of a `break` in the loop that would be affected by
the moved value as a heuristic for "shouldn't be cloned".
Fix #121466.
Diffstat (limited to 'compiler/rustc_mir_transform/src/coverage/counters.rs')
0 files changed, 0 insertions, 0 deletions
