error[E0382]: use of moved value: `foo.x`
  --> $DIR/fields-move.rs:18:9
   |
LL |         $foo.x
   |         ^^^^^^ value used here after move
...
LL |     assert_two_copies(copy_modern!(foo), foo.x);
   |                                          ----- value moved here
LL |     assert_two_copies(copy_legacy!(foo), foo.x);
   |                       ----------------- in this macro invocation
   |
   = note: move occurs because `foo.x` has type `NonCopy`, which does not implement the `Copy` trait
   = note: this error originates in the macro `copy_legacy` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0382]: use of moved value: `foo.x`
  --> $DIR/fields-move.rs:28:42
   |
LL |    $foo.x
   |    ------ value moved here
...
LL |     assert_two_copies(copy_modern!(foo), foo.x);
   |                                          ^^^^^ value used here after move
   |
   = note: move occurs because `foo.x` has type `NonCopy`, which does not implement the `Copy` trait

error[E0382]: use of moved value: `foo.x`
  --> $DIR/fields-move.rs:29:42
   |
LL |         $foo.x
   |         ------ value moved here
...
LL |     assert_two_copies(copy_legacy!(foo), foo.x);
   |                                          ^^^^^ value used here after move
   |
   = note: move occurs because `foo.x` has type `NonCopy`, which does not implement the `Copy` trait

error: aborting due to 3 previous errors

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