Auto merge of #55221 - matthewjasper:fewer-duplicate-migrate-messages, r=pnkfelix

Don't emit cannot move errors twice in migrate mode

Closes #55154
cc #53004

r? @pnkfelix
This commit is contained in:
bors 2018-10-30 03:57:53 +00:00
commit b1ca3907e0
44 changed files with 48 additions and 822 deletions

View file

@ -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()
) {
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,
);
}
}

View file

@ -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

View file

@ -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`.

View file

@ -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`.

View file

@ -1,20 +0,0 @@
error[E0507]: cannot move out of borrowed content
--> $DIR/borrowck-fn-in-const-a.rs:19:16
|
LL | return *x //[ast]~ ERROR cannot move out of borrowed content [E0507]
| ^^ cannot move out of borrowed content
error[E0507]: cannot move out of `*x` which is behind a `&` reference
--> $DIR/borrowck-fn-in-const-a.rs:19:16
|
LL | fn broken(x: &String) -> String {
| ------- help: consider changing this to be a mutable reference: `&mut std::string::String`
LL | return *x //[ast]~ ERROR cannot move out of borrowed content [E0507]
| ^^
| |
| cannot move out of `*x` which is behind a `&` reference
| `x` is a `&` reference, so the data it refers to cannot be moved
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0507`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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.

View file

@ -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.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -1,18 +0,0 @@
error[E0507]: cannot move out of static item
--> $DIR/borrowck-move-out-of-static-item.rs:28:10
|
LL | test(BAR); //[ast]~ ERROR cannot move out of static item [E0507]
| ^^^ cannot move out of static item
error[E0507]: cannot move out of immutable static item `BAR`
--> $DIR/borrowck-move-out-of-static-item.rs:28:10
|
LL | test(BAR); //[ast]~ ERROR cannot move out of static item [E0507]
| ^^^
| |
| cannot move out of immutable static item `BAR`
| cannot move
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0507`.

View file

@ -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: aborting due to previous error
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
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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -1,33 +0,0 @@
error[E0507]: cannot move out of borrowed content
--> $DIR/move-in-static-initializer-issue-38520.rs:25:23
|
LL | static Y: usize = get(*&X); //[ast]~ ERROR E0507
| ^^^ cannot move out of borrowed content
error[E0507]: cannot move out of data in a `&` reference
--> $DIR/move-in-static-initializer-issue-38520.rs:25:23
|
LL | static Y: usize = get(*&X); //[ast]~ ERROR E0507
| ^^^
| |
| cannot move out of data in a `&` reference
| cannot move
error[E0507]: cannot move out of borrowed content
--> $DIR/move-in-static-initializer-issue-38520.rs:27:22
|
LL | const Z: usize = get(*&X); //[ast]~ ERROR E0507
| ^^^ cannot move out of borrowed content
error[E0507]: cannot move out of data in a `&` reference
--> $DIR/move-in-static-initializer-issue-38520.rs:27:22
|
LL | const Z: usize = get(*&X); //[ast]~ ERROR E0507
| ^^^
| |
| cannot move out of data in a `&` reference
| cannot move
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0507`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -1,18 +0,0 @@
error[E0507]: cannot move out of borrowed content
--> $DIR/E0507.rs:22:5
|
LL | x.borrow().nothing_is_true(); //~ ERROR E0507
| ^^^^^^^^^^ cannot move out of borrowed content
error[E0507]: cannot move out of data in a `&` reference
--> $DIR/E0507.rs:22:5
|
LL | x.borrow().nothing_is_true(); //~ ERROR E0507
| ^^^^^^^^^^
| |
| cannot move out of data in a `&` reference
| cannot move
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0507`.

View file

@ -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: aborting due to 2 previous errors
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
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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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 3 previous errors
error: aborting due to 4 previous errors
Some errors occurred: E0161, E0507, E0508.
Some errors occurred: E0161, E0508.
For more information about an error, try `rustc --explain E0161`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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
|

View file

@ -1,18 +0,0 @@
error[E0507]: cannot move out of static item
--> $DIR/static-items-cant-move.rs:28:10
|
LL | test(BAR); //~ ERROR cannot move out of static item
| ^^^ cannot move out of static item
error[E0507]: cannot move out of immutable static item `BAR`
--> $DIR/static-items-cant-move.rs:28:10
|
LL | test(BAR); //~ ERROR cannot move out of static item
| ^^^
| |
| cannot move out of immutable static item `BAR`
| cannot move
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0507`.

View file

@ -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`.

View file

@ -1,20 +0,0 @@
error[E0507]: cannot move out of borrowed content
--> $DIR/trivial-bounds-leak-copy.rs:19:5
|
LL | *t //~ ERROR
| ^^ cannot move out of borrowed content
error[E0507]: cannot move out of `*t` which is behind a `&` reference
--> $DIR/trivial-bounds-leak-copy.rs:19:5
|
LL | fn move_out_string(t: &String) -> String {
| ------- help: consider changing this to be a mutable reference: `&mut std::string::String`
LL | *t //~ ERROR
| ^^
| |
| cannot move out of `*t` which is behind a `&` reference
| `t` is a `&` reference, so the data it refers to cannot be moved
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0507`.

View file

@ -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`.

View file

@ -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`.

View file

@ -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 previous error
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`.