Skip to content

Don't emit cannot move errors twice in migrate mode #55221

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions src/librustc_mir/borrow_check/mod.rs
Original file line number Diff line number Diff line change
@@ -1831,7 +1831,10 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
| Write(wk @ WriteKind::StorageDeadOrDrop)
| Write(wk @ WriteKind::MutableBorrow(BorrowKind::Shared))
| Write(wk @ WriteKind::MutableBorrow(BorrowKind::Shallow)) => {
if let Err(_place_err) = self.is_mutable(place, is_local_mutation_allowed) {
if let (Err(_place_err), true) = (
self.is_mutable(place, is_local_mutation_allowed),
self.errors_buffer.is_empty()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah great idea to let the ICE through if we have already signaled errors. Or at least I hope it’s a great idea.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(ugh I clearly misread the code 3 hours ago.)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just to be clear: this filter is going to affect more than just the migrate mode, right?

that is, I assume this will also cause us to stop emitting some move errors even in normal NLL mode?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or rather ... I guess it will stop us ... from ICE'ing in some scenarios under normal NLL mode if we've emitted an error already ...?

I don't know how I feel about that. I guess its fine.

) {
if self.infcx.tcx.migrate_borrowck() {
// rust-lang/rust#46908: In pure NLL mode this
// code path should be unreachable (and thus
@@ -1855,12 +1858,11 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
location,
);
} else {
self.infcx.tcx.sess.delay_span_bug(
span_bug!(
span,
&format!(
"Accessing `{:?}` with the kind `{:?}` shouldn't be possible",
place, kind
),
"Accessing `{:?}` with the kind `{:?}` shouldn't be possible",
place,
kind,
);
}
}
6 changes: 3 additions & 3 deletions src/librustc_mir/borrow_check/mutability_errors.rs
Original file line number Diff line number Diff line change
@@ -180,9 +180,9 @@ impl<'a, 'gcx, 'tcx> MirBorrowckCtxt<'a, 'gcx, 'tcx> {
AccessKind::Move => {
err = self.infcx.tcx
.cannot_move_out_of(span, &(item_msg + &reason), Origin::Mir);
act = "move";
acted_on = "moved";
span
err.span_label(span, "cannot move");
err.buffer(&mut self.errors_buffer);
return;
}
AccessKind::Mutate => {
err = self.infcx.tcx
14 changes: 1 addition & 13 deletions src/test/ui/access-mode-in-closures.nll.stderr
Original file line number Diff line number Diff line change
@@ -13,18 +13,6 @@ note: move occurs because `v` has type `std::vec::Vec<isize>`, which does not im
LL | match *s { sty(v) => v } //~ ERROR cannot move out
| ^

error[E0507]: cannot move out of `s.0` which is behind a `&` reference
--> $DIR/access-mode-in-closures.rs:19:24
|
LL | let _foo = unpack(|s| {
| - help: consider changing this to be a mutable reference: `&mut sty`
LL | // Test that `s` is moved here.
LL | match *s { sty(v) => v } //~ ERROR cannot move out
| ^
| |
| cannot move out of `s.0` which is behind a `&` reference
| `s` is a `&` reference, so the data it refers to cannot be moved

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
14 changes: 1 addition & 13 deletions src/test/ui/binop/binop-move-semantics.nll.stderr
Original file line number Diff line number Diff line change
@@ -32,18 +32,6 @@ error[E0507]: cannot move out of borrowed content
LL | *n; //~ ERROR: cannot move out of borrowed content
| ^^ cannot move out of borrowed content

error[E0507]: cannot move out of `*n` which is behind a `&` reference
--> $DIR/binop-move-semantics.rs:42:5
|
LL | let n = &y;
| -- help: consider changing this to be a mutable reference: `&mut y`
...
LL | *n; //~ ERROR: cannot move out of borrowed content
| ^^
| |
| cannot move out of `*n` which is behind a `&` reference
| `n` is a `&` reference, so the data it refers to cannot be moved

error[E0502]: cannot borrow `f` as immutable because it is also borrowed as mutable
--> $DIR/binop-move-semantics.rs:64:5
|
@@ -74,7 +62,7 @@ LL | | &mut f; //~ ERROR: cannot borrow `f` as mutable because it is also b
| | immutable borrow later used here
| mutable borrow occurs here

error: aborting due to 7 previous errors
error: aborting due to 6 previous errors

Some errors occurred: E0382, E0502, E0507.
For more information about an error, try `rustc --explain E0382`.
20 changes: 0 additions & 20 deletions src/test/ui/borrowck/borrowck-fn-in-const-a.ast.nll.stderr

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,13 +1,3 @@
error[E0507]: cannot move out of `*__next` which is behind a `&` reference
--> $DIR/borrowck-for-loop-correct-cmt-for-pattern.rs:22:10
|
LL | for &a in x.iter() { //~ ERROR cannot move out
| -^
| ||
| |cannot move out of `*__next` which is behind a `&` reference
| |`__next` is a `&` reference, so the data it refers to cannot be moved
| help: consider changing this to be a mutable reference: `&mut a`

error[E0507]: cannot move out of borrowed content
--> $DIR/borrowck-for-loop-correct-cmt-for-pattern.rs:22:15
|
@@ -23,16 +13,6 @@ note: move occurs because `a` has type `&mut i32`, which does not implement the
LL | for &a in x.iter() { //~ ERROR cannot move out
| ^

error[E0507]: cannot move out of `*__next` which is behind a `&` reference
--> $DIR/borrowck-for-loop-correct-cmt-for-pattern.rs:28:10
|
LL | for &a in &f.a { //~ ERROR cannot move out
| -^
| ||
| |cannot move out of `*__next` which is behind a `&` reference
| |`__next` is a `&` reference, so the data it refers to cannot be moved
| help: consider changing this to be a mutable reference: `&mut a`

error[E0507]: cannot move out of borrowed content
--> $DIR/borrowck-for-loop-correct-cmt-for-pattern.rs:28:15
|
@@ -48,16 +28,6 @@ note: move occurs because `a` has type `std::boxed::Box<isize>`, which does not
LL | for &a in &f.a { //~ ERROR cannot move out
| ^

error[E0507]: cannot move out of `*__next` which is behind a `&` reference
--> $DIR/borrowck-for-loop-correct-cmt-for-pattern.rs:32:10
|
LL | for &a in x.iter() { //~ ERROR cannot move out
| -^
| ||
| |cannot move out of `*__next` which is behind a `&` reference
| |`__next` is a `&` reference, so the data it refers to cannot be moved
| help: consider changing this to be a mutable reference: `&mut a`

error[E0507]: cannot move out of borrowed content
--> $DIR/borrowck-for-loop-correct-cmt-for-pattern.rs:32:15
|
@@ -73,6 +43,6 @@ note: move occurs because `a` has type `std::boxed::Box<i32>`, which does not im
LL | for &a in x.iter() { //~ ERROR cannot move out
| ^

error: aborting due to 6 previous errors
error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0507`.
17 changes: 1 addition & 16 deletions src/test/ui/borrowck/borrowck-in-static.nll.stderr
Original file line number Diff line number Diff line change
@@ -6,21 +6,6 @@ LL | let x = Box::new(0);
LL | Box::new(|| x) //~ ERROR cannot move out of captured outer variable
| ^ cannot move out of captured variable in an `Fn` closure

error[E0507]: cannot move out of `x`, as it is a captured variable in a `Fn` closure
--> $DIR/borrowck-in-static.rs:15:17
|
LL | Box::new(|| x) //~ ERROR cannot move out of captured outer variable
| ^
| |
| cannot move out of `x`, as it is a captured variable in a `Fn` closure
| cannot move
|
help: consider changing this to accept closures that implement `FnMut`
--> $DIR/borrowck-in-static.rs:15:14
|
LL | Box::new(|| x) //~ ERROR cannot move out of captured outer variable
| ^^^^

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
13 changes: 1 addition & 12 deletions src/test/ui/borrowck/borrowck-issue-2657-2.nll.stderr
Original file line number Diff line number Diff line change
@@ -7,17 +7,6 @@ LL | let _b = *y; //~ ERROR cannot move out
| cannot move out of borrowed content
| help: consider removing the `*`: `y`

error[E0507]: cannot move out of `*y` which is behind a `&` reference
--> $DIR/borrowck-issue-2657-2.rs:17:18
|
LL | Some(ref y) => {
| ----- help: consider changing this to be a mutable reference: `ref mut y`
LL | let _b = *y; //~ ERROR cannot move out
| ^^
| |
| cannot move out of `*y` which is behind a `&` reference
| `y` is a `&` reference, so the data it refers to cannot be moved

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
14 changes: 0 additions & 14 deletions src/test/ui/borrowck/borrowck-migrate-to-nll.edition.stderr
Original file line number Diff line number Diff line change
@@ -8,17 +8,3 @@ LL | (|| { let bar = foo; bar.take() })();
It represents potential unsoundness in your code.
This warning will become a hard error in the future.

warning[E0507]: cannot move out of `foo`, as it is immutable for the pattern guard
--> $DIR/borrowck-migrate-to-nll.rs:35:17
|
LL | (|| { let bar = foo; bar.take() })();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| cannot move out of `foo`, as it is immutable for the pattern guard
| cannot move
|
= note: variables bound in patterns are immutable until the end of the pattern guard
= warning: This error has been downgraded to a warning for backwards compatibility with previous releases.
It represents potential unsoundness in your code.
This warning will become a hard error in the future.

14 changes: 0 additions & 14 deletions src/test/ui/borrowck/borrowck-migrate-to-nll.zflag.stderr
Original file line number Diff line number Diff line change
@@ -8,17 +8,3 @@ LL | (|| { let bar = foo; bar.take() })();
It represents potential unsoundness in your code.
This warning will become a hard error in the future.

warning[E0507]: cannot move out of `foo`, as it is immutable for the pattern guard
--> $DIR/borrowck-migrate-to-nll.rs:35:17
|
LL | (|| { let bar = foo; bar.take() })();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| cannot move out of `foo`, as it is immutable for the pattern guard
| cannot move
|
= note: variables bound in patterns are immutable until the end of the pattern guard
= warning: This error has been downgraded to a warning for backwards compatibility with previous releases.
It represents potential unsoundness in your code.
This warning will become a hard error in the future.

50 changes: 1 addition & 49 deletions src/test/ui/borrowck/borrowck-move-error-with-note.nll.stderr
Original file line number Diff line number Diff line change
@@ -24,42 +24,6 @@ LL | num2) => (),
LL | Foo::Foo2(num) => (),
| ^^^

error[E0507]: cannot move out of `f.0` which is behind a `&` reference
--> $DIR/borrowck-move-error-with-note.rs:23:19
|
LL | let f = &Foo::Foo1(box 1, box 2);
| ------------------------ help: consider changing this to be a mutable reference: `&mut Foo::Foo1(box 1, box 2)`
...
LL | Foo::Foo1(num1,
| ^^^^
| |
| cannot move out of `f.0` which is behind a `&` reference
| `f` is a `&` reference, so the data it refers to cannot be moved

error[E0507]: cannot move out of `f.1` which is behind a `&` reference
--> $DIR/borrowck-move-error-with-note.rs:24:19
|
LL | let f = &Foo::Foo1(box 1, box 2);
| ------------------------ help: consider changing this to be a mutable reference: `&mut Foo::Foo1(box 1, box 2)`
...
LL | num2) => (),
| ^^^^
| |
| cannot move out of `f.1` which is behind a `&` reference
| `f` is a `&` reference, so the data it refers to cannot be moved

error[E0507]: cannot move out of `f.0` which is behind a `&` reference
--> $DIR/borrowck-move-error-with-note.rs:25:19
|
LL | let f = &Foo::Foo1(box 1, box 2);
| ------------------------ help: consider changing this to be a mutable reference: `&mut Foo::Foo1(box 1, box 2)`
...
LL | Foo::Foo2(num) => (),
| ^^^
| |
| cannot move out of `f.0` which is behind a `&` reference
| `f` is a `&` reference, so the data it refers to cannot be moved

error[E0509]: cannot move out of type `S`, which implements the `Drop` trait
--> $DIR/borrowck-move-error-with-note.rs:39:11
|
@@ -97,19 +61,7 @@ note: move occurs because `n` has type `std::boxed::Box<isize>`, which does not
LL | n => {
| ^

error[E0507]: cannot move out of `a.a` which is behind a `&` reference
--> $DIR/borrowck-move-error-with-note.rs:59:9
|
LL | let a = &A { a: box 1 };
| --------------- help: consider changing this to be a mutable reference: `&mut A { a: box 1 }`
...
LL | n => {
| ^
| |
| cannot move out of `a.a` which is behind a `&` reference
| `a` is a `&` reference, so the data it refers to cannot be moved

error: aborting due to 7 previous errors
error: aborting due to 3 previous errors

Some errors occurred: E0507, E0509.
For more information about an error, try `rustc --explain E0507`.
13 changes: 1 addition & 12 deletions src/test/ui/borrowck/borrowck-move-from-unsafe-ptr.nll.stderr
Original file line number Diff line number Diff line change
@@ -7,17 +7,6 @@ LL | let y = *x; //~ ERROR cannot move out of dereference of raw pointer
| cannot move out of dereference of raw pointer
| help: consider removing the `*`: `x`

error[E0507]: cannot move out of `*x` which is behind a `*const` pointer
--> $DIR/borrowck-move-from-unsafe-ptr.rs:13:13
|
LL | unsafe fn foo(x: *const Box<isize>) -> Box<isize> {
| ----------------- help: consider changing this to be a mutable pointer: `*mut std::boxed::Box<isize>`
LL | let y = *x; //~ ERROR cannot move out of dereference of raw pointer
| ^^
| |
| cannot move out of `*x` which is behind a `*const` pointer
| `x` is a `*const` pointer, so the data it refers to cannot be moved

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
29 changes: 1 addition & 28 deletions src/test/ui/borrowck/borrowck-move-in-irrefut-pat.ast.nll.stderr
Original file line number Diff line number Diff line change
@@ -14,15 +14,6 @@ note: move occurs because `_x` has type `std::string::String`, which does not im
LL | fn arg_item(&_x: &String) {}
| ^^

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/borrowck-move-in-irrefut-pat.rs:16:14
|
LL | fn arg_item(&_x: &String) {}
| ^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of borrowed content
--> $DIR/borrowck-move-in-irrefut-pat.rs:21:11
|
@@ -39,24 +30,6 @@ note: move occurs because `_x` has type `std::string::String`, which does not im
LL | with(|&_x| ())
| ^^

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/borrowck-move-in-irrefut-pat.rs:21:12
|
LL | with(|&_x| ())
| ^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/borrowck-move-in-irrefut-pat.rs:27:10
|
LL | let &_x = &"hi".to_string();
| ^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of borrowed content
--> $DIR/borrowck-move-in-irrefut-pat.rs:27:15
|
@@ -72,6 +45,6 @@ note: move occurs because `_x` has type `std::string::String`, which does not im
LL | let &_x = &"hi".to_string();
| ^^

error: aborting due to 6 previous errors
error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0507`.
Original file line number Diff line number Diff line change
@@ -4,15 +4,6 @@ error[E0507]: cannot move out of an `Rc`
LL | let _x = Rc::new(vec![1, 2]).into_iter();
| ^^^^^^^^^^^^^^^^^^^ cannot move out of an `Rc`

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/borrowck-move-out-of-overloaded-auto-deref.rs:17:14
|
LL | let _x = Rc::new(vec![1, 2]).into_iter();
| ^^^^^^^^^^^^^^^^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
Original file line number Diff line number Diff line change
@@ -7,15 +7,6 @@ LL | let _x = *Rc::new("hi".to_string());
| cannot move out of an `Rc`
| help: consider removing the `*`: `Rc::new("hi".to_string())`

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/borrowck-move-out-of-overloaded-deref.rs:14:14
|
LL | let _x = *Rc::new("hi".to_string());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.

This file was deleted.

29 changes: 2 additions & 27 deletions src/test/ui/borrowck/borrowck-move-out-of-vec-tail.nll.stderr
Original file line number Diff line number Diff line change
@@ -26,31 +26,6 @@ LL | //~| to prevent move
LL | Foo { string: b }] => {
|

error[E0507]: cannot move out of `tail[..].string` which is behind a `&` reference
--> $DIR/borrowck-move-out-of-vec-tail.rs:30:33
|
LL | [_, ref tail..] => {
| -------- help: consider changing this to be a mutable reference: `ref mut tail`
LL | match tail {
LL | &[Foo { string: a },
| ^
| |
| cannot move out of `tail[..].string` which is behind a `&` reference
| `tail` is a `&` reference, so the data it refers to cannot be moved

error[E0507]: cannot move out of `tail[..].string` which is behind a `&` reference
--> $DIR/borrowck-move-out-of-vec-tail.rs:34:33
|
LL | [_, ref tail..] => {
| -------- help: consider changing this to be a mutable reference: `ref mut tail`
...
LL | Foo { string: b }] => {
| ^
| |
| cannot move out of `tail[..].string` which is behind a `&` reference
| `tail` is a `&` reference, so the data it refers to cannot be moved

error: aborting due to 3 previous errors
error: aborting due to previous error

Some errors occurred: E0507, E0508.
For more information about an error, try `rustc --explain E0507`.
For more information about this error, try `rustc --explain E0508`.
Original file line number Diff line number Diff line change
@@ -7,15 +7,6 @@ LL | let bad = v[0];
| cannot move out of borrowed content
| help: consider borrowing here: `&v[0]`

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/borrowck-overloaded-index-move-from-vec.rs:30:15
|
LL | let bad = v[0];
| ^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
11 changes: 1 addition & 10 deletions src/test/ui/borrowck/issue-51415.nll.stderr
Original file line number Diff line number Diff line change
@@ -13,15 +13,6 @@ note: move occurs because `s` has type `std::string::String`, which does not imp
LL | let opt = a.iter().enumerate().find(|(_, &s)| {
| ^

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-51415.rs:16:47
|
LL | let opt = a.iter().enumerate().find(|(_, &s)| {
| ^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -7,25 +7,6 @@ LL | call(|| {
LL | y.into_iter();
| ^ cannot move out of captured variable in an `Fn` closure

error[E0507]: cannot move out of `y`, as it is a captured variable in a `Fn` closure
--> $DIR/unboxed-closures-move-upvar-from-non-once-ref-closure.rs:21:9
|
LL | y.into_iter();
| ^
| |
| cannot move out of `y`, as it is a captured variable in a `Fn` closure
| cannot move
|
help: consider changing this to accept closures that implement `FnMut`
--> $DIR/unboxed-closures-move-upvar-from-non-once-ref-closure.rs:20:10
|
LL | call(|| {
| __________^
LL | | y.into_iter();
LL | | //~^ ERROR cannot move out of captured outer variable in an `Fn` closure
LL | | });
| |_____^

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
11 changes: 1 addition & 10 deletions src/test/ui/by-move-pattern-binding.nll.stderr
Original file line number Diff line number Diff line change
@@ -16,15 +16,6 @@ note: move occurs because `identifier` has type `std::string::String`, which doe
LL | &E::Bar(identifier) => f(identifier.clone()) //~ ERROR cannot move
| ^^^^^^^^^^

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/by-move-pattern-binding.rs:26:17
|
LL | &E::Bar(identifier) => f(identifier.clone()) //~ ERROR cannot move
| ^^^^^^^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
11 changes: 1 addition & 10 deletions src/test/ui/check-static-values-constraints.nll.stderr
Original file line number Diff line number Diff line change
@@ -58,22 +58,13 @@ LL | let y = { static x: Box<isize> = box 3; x };
| cannot move out of static item
| help: consider borrowing here: `&x`

error[E0507]: cannot move out of immutable static item `x`
--> $DIR/check-static-values-constraints.rs:120:45
|
LL | let y = { static x: Box<isize> = box 3; x };
| ^
| |
| cannot move out of immutable static item `x`
| cannot move

error[E0010]: allocations are not allowed in statics
--> $DIR/check-static-values-constraints.rs:120:38
|
LL | let y = { static x: Box<isize> = box 3; x };
| ^^^^^ allocation not allowed in statics

error: aborting due to 11 previous errors
error: aborting due to 10 previous errors

Some errors occurred: E0010, E0015, E0493, E0507.
For more information about an error, try `rustc --explain E0010`.
20 changes: 1 addition & 19 deletions src/test/ui/dst/dst-index.nll.stderr
Original file line number Diff line number Diff line change
@@ -16,31 +16,13 @@ error[E0507]: cannot move out of borrowed content
LL | S[0];
| ^^^^ cannot move out of borrowed content

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/dst-index.rs:41:5
|
LL | S[0];
| ^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of borrowed content
--> $DIR/dst-index.rs:44:5
|
LL | T[0];
| ^^^^ cannot move out of borrowed content

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/dst-index.rs:44:5
|
LL | T[0];
| ^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 6 previous errors
error: aborting due to 4 previous errors

Some errors occurred: E0161, E0507.
For more information about an error, try `rustc --explain E0161`.
22 changes: 1 addition & 21 deletions src/test/ui/dst/dst-rvalue.nll.stderr
Original file line number Diff line number Diff line change
@@ -16,33 +16,13 @@ error[E0507]: cannot move out of borrowed content
LL | let _x: Box<str> = box *"hello world";
| ^^^^^^^^^^^^^^ cannot move out of borrowed content

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/dst-rvalue.rs:16:28
|
LL | let _x: Box<str> = box *"hello world";
| ^^^^^^^^^^^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0508]: cannot move out of type `[isize]`, a non-copy slice
--> $DIR/dst-rvalue.rs:21:32
|
LL | let _x: Box<[isize]> = box *array;
| ^^^^^^ cannot move out of here

error[E0507]: cannot move out of `*array` which is behind a `&` reference
--> $DIR/dst-rvalue.rs:21:32
|
LL | let array: &[isize] = &[1, 2, 3];
| ---------- help: consider changing this to be a mutable reference: `&mut [1, 2, 3]`
LL | let _x: Box<[isize]> = box *array;
| ^^^^^^
| |
| cannot move out of `*array` which is behind a `&` reference
| `array` is a `&` reference, so the data it refers to cannot be moved

error: aborting due to 6 previous errors
error: aborting due to 4 previous errors

Some errors occurred: E0161, E0507, E0508.
For more information about an error, try `rustc --explain E0161`.
18 changes: 0 additions & 18 deletions src/test/ui/error-codes/E0507.nll.stderr

This file was deleted.

41 changes: 2 additions & 39 deletions src/test/ui/issues/issue-12567.nll.stderr
Original file line number Diff line number Diff line change
@@ -40,43 +40,6 @@ LL | (&[], &[hd, ..]) | (&[hd, ..], &[])
LL | (&[hd1, ..], &[hd2, ..])
| ^^^

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-12567.rs:16:17
|
LL | (&[], &[hd, ..]) | (&[hd, ..], &[])
| ^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-12567.rs:16:31
|
LL | (&[], &[hd, ..]) | (&[hd, ..], &[])
| ^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-12567.rs:20:12
|
LL | (&[hd1, ..], &[hd2, ..])
| ^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-12567.rs:20:24
|
LL | (&[hd1, ..], &[hd2, ..])
| ^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 6 previous errors
error: aborting due to 2 previous errors

Some errors occurred: E0507, E0508.
For more information about an error, try `rustc --explain E0507`.
For more information about this error, try `rustc --explain E0508`.
11 changes: 1 addition & 10 deletions src/test/ui/issues/issue-17718-static-move.nll.stderr
Original file line number Diff line number Diff line change
@@ -7,15 +7,6 @@ LL | let _a = FOO; //~ ERROR: cannot move out of static item
| cannot move out of static item
| help: consider borrowing here: `&FOO`

error[E0507]: cannot move out of immutable static item `FOO`
--> $DIR/issue-17718-static-move.rs:16:14
|
LL | let _a = FOO; //~ ERROR: cannot move out of static item
| ^^^
| |
| cannot move out of immutable static item `FOO`
| cannot move

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
20 changes: 1 addition & 19 deletions src/test/ui/issues/issue-20801.nll.stderr
Original file line number Diff line number Diff line change
@@ -16,15 +16,6 @@ LL | let b = unsafe { *imm_ref() };
| cannot move out of borrowed content
| help: consider removing the `*`: `imm_ref()`

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-20801.rs:39:22
|
LL | let b = unsafe { *imm_ref() };
| ^^^^^^^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of dereference of raw pointer
--> $DIR/issue-20801.rs:42:22
|
@@ -43,15 +34,6 @@ LL | let d = unsafe { *const_ptr() };
| cannot move out of dereference of raw pointer
| help: consider removing the `*`: `const_ptr()`

error[E0507]: cannot move out of data in a `*const` pointer
--> $DIR/issue-20801.rs:45:22
|
LL | let d = unsafe { *const_ptr() };
| ^^^^^^^^^^^^
| |
| cannot move out of data in a `*const` pointer
| cannot move

error: aborting due to 6 previous errors
error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0507`.
13 changes: 1 addition & 12 deletions src/test/ui/issues/issue-2590.nll.stderr
Original file line number Diff line number Diff line change
@@ -4,17 +4,6 @@ error[E0507]: cannot move out of borrowed content
LL | self.tokens //~ ERROR cannot move out of borrowed content
| ^^^^^^^^^^^ cannot move out of borrowed content

error[E0507]: cannot move out of `self.tokens` which is behind a `&` reference
--> $DIR/issue-2590.rs:22:9
|
LL | fn parse(&self) -> Vec<isize> {
| ----- help: consider changing this to be a mutable reference: `&mut self`
LL | self.tokens //~ ERROR cannot move out of borrowed content
| ^^^^^^^^^^^
| |
| cannot move out of `self.tokens` which is behind a `&` reference
| `self` is a `&` reference, so the data it refers to cannot be moved

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
13 changes: 2 additions & 11 deletions src/test/ui/issues/issue-30355.nll.stderr
Original file line number Diff line number Diff line change
@@ -16,16 +16,7 @@ error[E0508]: cannot move out of type `[u8]`, a non-copy slice
LL | &X(*Y)
| ^^ cannot move out of here

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-30355.rs:15:8
|
LL | &X(*Y)
| ^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 4 previous errors
error: aborting due to 3 previous errors

Some errors occurred: E0161, E0507, E0508.
Some errors occurred: E0161, E0508.
For more information about an error, try `rustc --explain E0161`.
Original file line number Diff line number Diff line change
@@ -7,15 +7,6 @@ LL | let e = f.v[0]; //~ ERROR cannot move out of indexed content
| cannot move out of borrowed content
| help: consider borrowing here: `&f.v[0]`

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-40402-1.rs:19:13
|
LL | let e = f.v[0]; //~ ERROR cannot move out of indexed content
| ^^^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
Original file line number Diff line number Diff line change
@@ -1,21 +1,3 @@
error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-40402-2.rs:15:10
|
LL | let (a, b) = x[0]; //~ ERROR cannot move out of indexed content
| ^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/issue-40402-2.rs:15:13
|
LL | let (a, b) = x[0]; //~ ERROR cannot move out of indexed content
| ^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of borrowed content
--> $DIR/issue-40402-2.rs:15:18
|
@@ -33,6 +15,6 @@ note: move occurs because these variables have types that don't implement the `C
LL | let (a, b) = x[0]; //~ ERROR cannot move out of indexed content
| ^ ^

error: aborting due to 3 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
11 changes: 1 addition & 10 deletions src/test/ui/issues/issue-4335.nll.stderr
Original file line number Diff line number Diff line change
@@ -6,15 +6,6 @@ LL | fn f<'r, T>(v: &'r T) -> Box<FnMut() -> T + 'r> {
LL | id(Box::new(|| *v))
| ^^ cannot move out of captured variable in an `FnMut` closure

error[E0507]: cannot move out of `*v` which is behind a `&` reference
--> $DIR/issue-4335.rs:16:20
|
LL | id(Box::new(|| *v))
| ^^
| |
| cannot move out of `*v` which is behind a `&` reference
| cannot move

error[E0373]: closure may outlive the current function, but it borrows `v`, which is owned by the current function
--> $DIR/issue-4335.rs:16:17
|
@@ -33,7 +24,7 @@ help: to force the closure to take ownership of `v` (and any other referenced va
LL | id(Box::new(move || *v))
| ^^^^^^^

error: aborting due to 3 previous errors
error: aborting due to 2 previous errors

Some errors occurred: E0373, E0507.
For more information about an error, try `rustc --explain E0373`.
14 changes: 1 addition & 13 deletions src/test/ui/moves/moves-based-on-type-block-bad.nll.stderr
Original file line number Diff line number Diff line change
@@ -16,18 +16,6 @@ note: move occurs because `x` has type `std::boxed::Box<isize>`, which does not
LL | box E::Bar(x) => println!("{}", x.to_string()),
| ^

error[E0507]: cannot move out of `hellothere.x.0` which is behind a `&` reference
--> $DIR/moves-based-on-type-block-bad.rs:37:28
|
LL | f(&s, |hellothere| {
| ---------- help: consider changing this to be a mutable reference: `&mut S`
...
LL | box E::Bar(x) => println!("{}", x.to_string()),
| ^
| |
| cannot move out of `hellothere.x.0` which is behind a `&` reference
| `hellothere` is a `&` reference, so the data it refers to cannot be moved

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
Original file line number Diff line number Diff line change
@@ -6,21 +6,6 @@ LL | let i = box 3;
LL | let _f = to_fn(|| test(i)); //~ ERROR cannot move out
| ^ cannot move out of captured variable in an `Fn` closure

error[E0507]: cannot move out of `i`, as it is a captured variable in a `Fn` closure
--> $DIR/moves-based-on-type-move-out-of-closure-env-issue-1965.rs:21:28
|
LL | let _f = to_fn(|| test(i)); //~ ERROR cannot move out
| ^
| |
| cannot move out of `i`, as it is a captured variable in a `Fn` closure
| cannot move
|
help: consider changing this to accept closures that implement `FnMut`
--> $DIR/moves-based-on-type-move-out-of-closure-env-issue-1965.rs:21:20
|
LL | let _f = to_fn(|| test(i)); //~ ERROR cannot move out
| ^^^^^^^^^^

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.
72 changes: 1 addition & 71 deletions src/test/ui/nll/cannot-move-block-spans.nll.stderr
Original file line number Diff line number Diff line change
@@ -7,17 +7,6 @@ LL | let x = { *r }; //~ ERROR
| cannot move out of borrowed content
| help: consider removing the `*`: `r`

error[E0507]: cannot move out of `*r` which is behind a `&` reference
--> $DIR/cannot-move-block-spans.rs:15:15
|
LL | pub fn deref(r: &String) {
| ------- help: consider changing this to be a mutable reference: `&mut std::string::String`
LL | let x = { *r }; //~ ERROR
| ^^
| |
| cannot move out of `*r` which is behind a `&` reference
| `r` is a `&` reference, so the data it refers to cannot be moved

error[E0507]: cannot move out of borrowed content
--> $DIR/cannot-move-block-spans.rs:16:22
|
@@ -27,18 +16,6 @@ LL | let y = unsafe { *r }; //~ ERROR
| cannot move out of borrowed content
| help: consider removing the `*`: `r`

error[E0507]: cannot move out of `*r` which is behind a `&` reference
--> $DIR/cannot-move-block-spans.rs:16:22
|
LL | pub fn deref(r: &String) {
| ------- help: consider changing this to be a mutable reference: `&mut std::string::String`
LL | let x = { *r }; //~ ERROR
LL | let y = unsafe { *r }; //~ ERROR
| ^^
| |
| cannot move out of `*r` which is behind a `&` reference
| `r` is a `&` reference, so the data it refers to cannot be moved

error[E0507]: cannot move out of borrowed content
--> $DIR/cannot-move-block-spans.rs:17:26
|
@@ -48,18 +25,6 @@ LL | let z = loop { break *r; }; //~ ERROR
| cannot move out of borrowed content
| help: consider removing the `*`: `r`

error[E0507]: cannot move out of `*r` which is behind a `&` reference
--> $DIR/cannot-move-block-spans.rs:17:26
|
LL | pub fn deref(r: &String) {
| ------- help: consider changing this to be a mutable reference: `&mut std::string::String`
...
LL | let z = loop { break *r; }; //~ ERROR
| ^^
| |
| cannot move out of `*r` which is behind a `&` reference
| `r` is a `&` reference, so the data it refers to cannot be moved

error[E0508]: cannot move out of type `[std::string::String; 2]`, a non-copy array
--> $DIR/cannot-move-block-spans.rs:21:15
|
@@ -96,17 +61,6 @@ LL | let x = { let mut u = 0; u += 1; *r }; //~ ERROR
| cannot move out of borrowed content
| help: consider removing the `*`: `r`

error[E0507]: cannot move out of `*r` which is behind a `&` reference
--> $DIR/cannot-move-block-spans.rs:27:38
|
LL | pub fn additional_statement_cases(r: &String) {
| ------- help: consider changing this to be a mutable reference: `&mut std::string::String`
LL | let x = { let mut u = 0; u += 1; *r }; //~ ERROR
| ^^
| |
| cannot move out of `*r` which is behind a `&` reference
| `r` is a `&` reference, so the data it refers to cannot be moved

error[E0507]: cannot move out of borrowed content
--> $DIR/cannot-move-block-spans.rs:28:45
|
@@ -116,18 +70,6 @@ LL | let y = unsafe { let mut u = 0; u += 1; *r }; //~ ERROR
| cannot move out of borrowed content
| help: consider removing the `*`: `r`

error[E0507]: cannot move out of `*r` which is behind a `&` reference
--> $DIR/cannot-move-block-spans.rs:28:45
|
LL | pub fn additional_statement_cases(r: &String) {
| ------- help: consider changing this to be a mutable reference: `&mut std::string::String`
LL | let x = { let mut u = 0; u += 1; *r }; //~ ERROR
LL | let y = unsafe { let mut u = 0; u += 1; *r }; //~ ERROR
| ^^
| |
| cannot move out of `*r` which is behind a `&` reference
| `r` is a `&` reference, so the data it refers to cannot be moved

error[E0507]: cannot move out of borrowed content
--> $DIR/cannot-move-block-spans.rs:29:49
|
@@ -137,19 +79,7 @@ LL | let z = loop { let mut u = 0; u += 1; break *r; u += 2; }; //~ ERROR
| cannot move out of borrowed content
| help: consider removing the `*`: `r`

error[E0507]: cannot move out of `*r` which is behind a `&` reference
--> $DIR/cannot-move-block-spans.rs:29:49
|
LL | pub fn additional_statement_cases(r: &String) {
| ------- help: consider changing this to be a mutable reference: `&mut std::string::String`
...
LL | let z = loop { let mut u = 0; u += 1; break *r; u += 2; }; //~ ERROR
| ^^
| |
| cannot move out of `*r` which is behind a `&` reference
| `r` is a `&` reference, so the data it refers to cannot be moved

error: aborting due to 15 previous errors
error: aborting due to 9 previous errors

Some errors occurred: E0507, E0508.
For more information about an error, try `rustc --explain E0507`.
14 changes: 0 additions & 14 deletions src/test/ui/nll/match-guards-always-borrow.ast.nll.stderr
Original file line number Diff line number Diff line change
@@ -8,20 +8,6 @@ LL | (|| { let bar = foo; bar.take() })();
It represents potential unsoundness in your code.
This warning will become a hard error in the future.

warning[E0507]: cannot move out of `foo`, as it is immutable for the pattern guard
--> $DIR/match-guards-always-borrow.rs:23:13
|
LL | (|| { let bar = foo; bar.take() })();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| cannot move out of `foo`, as it is immutable for the pattern guard
| cannot move
|
= note: variables bound in patterns are immutable until the end of the pattern guard
= warning: This error has been downgraded to a warning for backwards compatibility with previous releases.
It represents potential unsoundness in your code.
This warning will become a hard error in the future.

error: compilation successful
--> $DIR/match-guards-always-borrow.rs:57:1
|
18 changes: 0 additions & 18 deletions src/test/ui/static/static-items-cant-move.nll.stderr

This file was deleted.

38 changes: 1 addition & 37 deletions src/test/ui/std-uncopyable-atomics.nll.stderr
Original file line number Diff line number Diff line change
@@ -7,15 +7,6 @@ LL | let x = *&x; //~ ERROR: cannot move out of borrowed content
| cannot move out of borrowed content
| help: consider removing the `*`: `&x`

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/std-uncopyable-atomics.rs:19:13
|
LL | let x = *&x; //~ ERROR: cannot move out of borrowed content
| ^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of borrowed content
--> $DIR/std-uncopyable-atomics.rs:21:13
|
@@ -25,15 +16,6 @@ LL | let x = *&x; //~ ERROR: cannot move out of borrowed content
| cannot move out of borrowed content
| help: consider removing the `*`: `&x`

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/std-uncopyable-atomics.rs:21:13
|
LL | let x = *&x; //~ ERROR: cannot move out of borrowed content
| ^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of borrowed content
--> $DIR/std-uncopyable-atomics.rs:23:13
|
@@ -43,15 +25,6 @@ LL | let x = *&x; //~ ERROR: cannot move out of borrowed content
| cannot move out of borrowed content
| help: consider removing the `*`: `&x`

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/std-uncopyable-atomics.rs:23:13
|
LL | let x = *&x; //~ ERROR: cannot move out of borrowed content
| ^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error[E0507]: cannot move out of borrowed content
--> $DIR/std-uncopyable-atomics.rs:25:13
|
@@ -61,15 +34,6 @@ LL | let x = *&x; //~ ERROR: cannot move out of borrowed content
| cannot move out of borrowed content
| help: consider removing the `*`: `&x`

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/std-uncopyable-atomics.rs:25:13
|
LL | let x = *&x; //~ ERROR: cannot move out of borrowed content
| ^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 8 previous errors
error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0507`.
20 changes: 0 additions & 20 deletions src/test/ui/trivial-bounds/trivial-bounds-leak-copy.nll.stderr

This file was deleted.

Original file line number Diff line number Diff line change
@@ -6,21 +6,6 @@ LL | let x = Box::new(0);
LL | let f = to_fn(|| drop(x)); //~ ERROR cannot move
| ^ cannot move out of captured variable in an `Fn` closure

error[E0507]: cannot move out of `x`, as it is a captured variable in a `Fn` closure
--> $DIR/unboxed-closure-illegal-move.rs:25:31
|
LL | let f = to_fn(|| drop(x)); //~ ERROR cannot move
| ^
| |
| cannot move out of `x`, as it is a captured variable in a `Fn` closure
| cannot move
|
help: consider changing this to accept closures that implement `FnMut`
--> $DIR/unboxed-closure-illegal-move.rs:25:23
|
LL | let f = to_fn(|| drop(x)); //~ ERROR cannot move
| ^^^^^^^^^^

error[E0507]: cannot move out of captured variable in an `FnMut` closure
--> $DIR/unboxed-closure-illegal-move.rs:29:35
|
@@ -37,21 +22,6 @@ LL | let x = Box::new(0);
LL | let f = to_fn(move || drop(x)); //~ ERROR cannot move
| ^ cannot move out of captured variable in an `Fn` closure

error[E0507]: cannot move out of `x`, as it is a captured variable in a `Fn` closure
--> $DIR/unboxed-closure-illegal-move.rs:38:36
|
LL | let f = to_fn(move || drop(x)); //~ ERROR cannot move
| ^
| |
| cannot move out of `x`, as it is a captured variable in a `Fn` closure
| cannot move
|
help: consider changing this to accept closures that implement `FnMut`
--> $DIR/unboxed-closure-illegal-move.rs:38:23
|
LL | let f = to_fn(move || drop(x)); //~ ERROR cannot move
| ^^^^^^^^^^^^^^^

error[E0507]: cannot move out of captured variable in an `FnMut` closure
--> $DIR/unboxed-closure-illegal-move.rs:42:40
|
@@ -60,6 +30,6 @@ LL | let x = Box::new(0);
LL | let f = to_fn_mut(move || drop(x)); //~ ERROR cannot move
| ^ cannot move out of captured variable in an `FnMut` closure

error: aborting due to 6 previous errors
error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0507`.
14 changes: 1 addition & 13 deletions src/test/ui/unop-move-semantics.nll.stderr
Original file line number Diff line number Diff line change
@@ -21,19 +21,7 @@ error[E0507]: cannot move out of borrowed content
LL | !*n; //~ ERROR: cannot move out of borrowed content
| ^^ cannot move out of borrowed content

error[E0507]: cannot move out of `*n` which is behind a `&` reference
--> $DIR/unop-move-semantics.rs:36:6
|
LL | let n = &y;
| -- help: consider changing this to be a mutable reference: `&mut y`
...
LL | !*n; //~ ERROR: cannot move out of borrowed content
| ^^
| |
| cannot move out of `*n` which is behind a `&` reference
| `n` is a `&` reference, so the data it refers to cannot be moved

error: aborting due to 4 previous errors
error: aborting due to 3 previous errors

Some errors occurred: E0382, E0507.
For more information about an error, try `rustc --explain E0382`.
14 changes: 2 additions & 12 deletions src/test/ui/unsized-locals/unsized-exprs2.nll.stderr
Original file line number Diff line number Diff line change
@@ -4,16 +4,6 @@ error[E0508]: cannot move out of type `[u8]`, a non-copy slice
LL | udrop::<[u8]>(foo()[..]);
| ^^^^^^^^^ cannot move out of here

error[E0507]: cannot move out of data in a `&` reference
--> $DIR/unsized-exprs2.rs:22:19
|
LL | udrop::<[u8]>(foo()[..]);
| ^^^^^^^^^
| |
| cannot move out of data in a `&` reference
| cannot move

error: aborting due to 2 previous errors
error: aborting due to previous error

Some errors occurred: E0507, E0508.
For more information about an error, try `rustc --explain E0507`.
For more information about this error, try `rustc --explain E0508`.