error[E0507]: cannot move out of `*a` which is behind a shared reference
  --> $DIR/move-errors.rs:6:13
   |
LL |     let b = *a;
   |             ^^
   |             |
   |             move occurs because `*a` has type `A`, which does not implement the `Copy` trait
   |             help: consider borrowing here: `&*a`

error[E0508]: cannot move out of type `[A; 1]`, a non-copy array
  --> $DIR/move-errors.rs:12:13
   |
LL |     let b = a[0];
   |             ^^^^
   |             |
   |             cannot move out of here
   |             move occurs because `a[_]` has type `A`, which does not implement the `Copy` trait
   |             help: consider borrowing here: `&a[0]`

error[E0507]: cannot move out of `**r` which is behind a shared reference
  --> $DIR/move-errors.rs:19:13
   |
LL |     let s = **r;
   |             ^^^
   |             |
   |             move occurs because `**r` has type `A`, which does not implement the `Copy` trait
   |             help: consider borrowing here: `&**r`

error[E0507]: cannot move out of an `Rc`
  --> $DIR/move-errors.rs:27:13
   |
LL |     let s = *r;
   |             ^^
   |             |
   |             move occurs because value has type `A`, which does not implement the `Copy` trait
   |             help: consider borrowing here: `&*r`

error[E0508]: cannot move out of type `[A; 1]`, a non-copy array
  --> $DIR/move-errors.rs:32:13
   |
LL |     let a = [A("".to_string())][0];
   |             ^^^^^^^^^^^^^^^^^^^^^^
   |             |
   |             cannot move out of here
   |             move occurs because value has type `A`, which does not implement the `Copy` trait
   |             help: consider borrowing here: `&[A("".to_string())][0]`

error[E0507]: cannot move out of `a.0` which is behind a shared reference
  --> $DIR/move-errors.rs:38:16
   |
LL |     let A(s) = *a;
   |           -    ^^ help: consider borrowing here: `&*a`
   |           |
   |           data moved here
   |           move occurs because `s` has type `String`, which does not implement the `Copy` trait

error[E0509]: cannot move out of type `D`, which implements the `Drop` trait
  --> $DIR/move-errors.rs:44:19
   |
LL |     let C(D(s)) = c;
   |             -     ^ cannot move out of here
   |             |
   |             data moved here
   |             move occurs because `s` has type `String`, which does not implement the `Copy` trait

error[E0507]: cannot move out of `*a` which is behind a shared reference
  --> $DIR/move-errors.rs:51:9
   |
LL |     b = *a;
   |         ^^ move occurs because `*a` has type `A`, which does not implement the `Copy` trait

error[E0508]: cannot move out of type `[B; 1]`, a non-copy array
  --> $DIR/move-errors.rs:74:11
   |
LL |     match x[0] {
   |           ^^^^
   |           |
   |           cannot move out of here
   |           help: consider borrowing here: `&x[0]`
LL |
LL |         B::U(d) => (),
   |              - data moved here
LL |         B::V(s) => (),
   |              - ...and here
   |
   = note: move occurs because these variables have types that don't implement the `Copy` trait

error[E0509]: cannot move out of type `D`, which implements the `Drop` trait
  --> $DIR/move-errors.rs:83:11
   |
LL |     match x {
   |           ^ cannot move out of here
...
LL |         B::U(D(s)) => (),
   |                -
   |                |
   |                data moved here
   |                move occurs because `s` has type `String`, which does not implement the `Copy` trait

error[E0509]: cannot move out of type `D`, which implements the `Drop` trait
  --> $DIR/move-errors.rs:92:11
   |
LL |     match x {
   |           ^ cannot move out of here
...
LL |         (D(s), &t) => (),
   |            -
   |            |
   |            data moved here
   |            move occurs because `s` has type `String`, which does not implement the `Copy` trait

error[E0507]: cannot move out of `*x.1` which is behind a shared reference
  --> $DIR/move-errors.rs:92:11
   |
LL |     match x {
   |           ^
...
LL |         (D(s), &t) => (),
   |                 -
   |                 |
   |                 data moved here
   |                 move occurs because `t` has type `String`, which does not implement the `Copy` trait

error[E0509]: cannot move out of type `F`, which implements the `Drop` trait
  --> $DIR/move-errors.rs:102:11
   |
LL |     match x {
   |           ^ cannot move out of here
LL |
LL |         F(s, mut t) => (),
   |           -  ----- ...and here
   |           |
   |           data moved here
   |
   = note: move occurs because these variables have types that don't implement the `Copy` trait

error[E0507]: cannot move out of `x.0` which is behind a shared reference
  --> $DIR/move-errors.rs:110:11
   |
LL |     match *x {
   |           ^^ help: consider borrowing here: `&*x`
LL |
LL |         Ok(s) | Err(s) => (),
   |            -
   |            |
   |            data moved here
   |            move occurs because `s` has type `String`, which does not implement the `Copy` trait

error: aborting due to 14 previous errors

Some errors have detailed explanations: E0507, E0508, E0509.
For more information about an error, try `rustc --explain E0507`.
