diff options
| author | Ralf Jung <post@ralfj.de> | 2020-06-15 09:57:22 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-15 09:57:22 +0200 |
| commit | 372cb9b69c76a042d0b9d4b48ff6084f64c84a2c (patch) | |
| tree | 9da090fb1eb982773c6a44689d288713457496a2 /src/liballoc/vec.rs | |
| parent | 5c61a8dc34c3e2fc6d7f02cb288c350f0233f944 (diff) | |
| parent | 4646e2da2d0d3b24d1f38c9904bdb7950a658d84 (diff) | |
| download | rust-372cb9b69c76a042d0b9d4b48ff6084f64c84a2c.tar.gz rust-372cb9b69c76a042d0b9d4b48ff6084f64c84a2c.zip | |
Rollup merge of #72389 - Aaron1011:feature/move-fn-self-msg, r=nikomatsakis
Explain move errors that occur due to method calls involving `self`
When calling a method that takes `self` (e.g. `vec.into_iter()`), the method receiver is moved out of. If the method receiver is used again, a move error will be emitted::
```rust
fn main() {
let a = vec![true];
a.into_iter();
a;
}
```
emits
```
error[E0382]: use of moved value: `a`
--> src/main.rs:4:5
|
2 | let a = vec![true];
| - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
3 | a.into_iter();
| - value moved here
4 | a;
| ^ value used here after move
```
However, the error message doesn't make it clear that the move is caused by the call to `into_iter`.
This PR adds additional messages to move errors when the move is caused by using a value as the receiver of a `self` method::
```
error[E0382]: use of moved value: `a`
--> vec.rs:4:5
|
2 | let a = vec![true];
| - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
3 | a.into_iter();
| ------------- value moved due to this method call
4 | a;
| ^ value used here after move
|
note: this function takes `self`, which moves the receiver
--> /home/aaron/repos/rust/src/libcore/iter/traits/collect.rs:239:5
|
239 | fn into_iter(self) -> Self::IntoIter;
```
TODO:
- [x] Add special handling for `FnOnce/FnMut/Fn` - we probably don't want to point at the unstable trait methods
- [x] Consider adding additional context for operations (e.g. `Shr::shr`) when the call was generated using the operator syntax (e.g. `a >> b`)
- [x] Consider pointing to the method parent (impl or trait block) in addition to the method itself.
Diffstat (limited to 'src/liballoc/vec.rs')
0 files changed, 0 insertions, 0 deletions
