mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
2df4f7dd8c
When encountering a move conflict, on an expression that is `!Copy` passed as an argument to an `fn` that is `impl AsRef`, suggest borrowing the expression. ``` error[E0382]: use of moved value: `bar` --> f204.rs:14:15 | 12 | let bar = Bar; | --- move occurs because `bar` has type `Bar`, which does not implement the `Copy` trait 13 | foo(bar); | --- value moved here 14 | let baa = bar; | ^^^ value used here after move | help: borrow the value to avoid moving it | 13 | foo(&bar); | + ``` Fix #41708
80 lines
2.3 KiB
Plaintext
80 lines
2.3 KiB
Plaintext
error[E0382]: use of moved value: `bar`
|
|
--> $DIR/moved-value-on-as-ref-arg.rs:27:16
|
|
|
|
|
LL | let bar = Bar;
|
|
| --- move occurs because `bar` has type `Bar`, which does not implement the `Copy` trait
|
|
LL | foo(bar);
|
|
| --- value moved here
|
|
LL | let _baa = bar;
|
|
| ^^^ value used here after move
|
|
|
|
|
help: borrow the value to avoid moving it
|
|
|
|
|
LL | foo(&bar);
|
|
| +
|
|
|
|
error[E0382]: use of moved value: `bar`
|
|
--> $DIR/moved-value-on-as-ref-arg.rs:30:16
|
|
|
|
|
LL | let mut bar = Bar;
|
|
| ------- move occurs because `bar` has type `Bar`, which does not implement the `Copy` trait
|
|
LL | qux(bar);
|
|
| --- value moved here
|
|
LL | let _baa = bar;
|
|
| ^^^ value used here after move
|
|
|
|
|
note: if `Bar` implemented `Clone`, you could clone the value
|
|
--> $DIR/moved-value-on-as-ref-arg.rs:5:1
|
|
|
|
|
LL | struct Bar;
|
|
| ^^^^^^^^^^ consider implementing `Clone` for this type
|
|
...
|
|
LL | qux(bar);
|
|
| --- you could clone this value
|
|
help: borrow the value to avoid moving it
|
|
|
|
|
LL | qux(&mut bar);
|
|
| ++++
|
|
|
|
error[E0382]: use of moved value: `bar`
|
|
--> $DIR/moved-value-on-as-ref-arg.rs:33:16
|
|
|
|
|
LL | let bar = Bar;
|
|
| --- move occurs because `bar` has type `Bar`, which does not implement the `Copy` trait
|
|
LL | bat(bar);
|
|
| --- value moved here
|
|
LL | let _baa = bar;
|
|
| ^^^ value used here after move
|
|
|
|
|
help: borrow the value to avoid moving it
|
|
|
|
|
LL | bat(&bar);
|
|
| +
|
|
|
|
error[E0382]: use of moved value: `bar`
|
|
--> $DIR/moved-value-on-as-ref-arg.rs:36:16
|
|
|
|
|
LL | let mut bar = Bar;
|
|
| ------- move occurs because `bar` has type `Bar`, which does not implement the `Copy` trait
|
|
LL | baz(bar);
|
|
| --- value moved here
|
|
LL | let _baa = bar;
|
|
| ^^^ value used here after move
|
|
|
|
|
note: if `Bar` implemented `Clone`, you could clone the value
|
|
--> $DIR/moved-value-on-as-ref-arg.rs:5:1
|
|
|
|
|
LL | struct Bar;
|
|
| ^^^^^^^^^^ consider implementing `Clone` for this type
|
|
...
|
|
LL | baz(bar);
|
|
| --- you could clone this value
|
|
help: borrow the value to avoid moving it
|
|
|
|
|
LL | baz(&mut bar);
|
|
| ++++
|
|
|
|
error: aborting due to 4 previous errors
|
|
|
|
For more information about this error, try `rustc --explain E0382`.
|