summaryrefslogtreecommitdiffstats
path: root/src/test/ui/hygiene/fields-move.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/hygiene/fields-move.rs')
-rw-r--r--src/test/ui/hygiene/fields-move.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/test/ui/hygiene/fields-move.rs b/src/test/ui/hygiene/fields-move.rs
new file mode 100644
index 000000000..401ad97e3
--- /dev/null
+++ b/src/test/ui/hygiene/fields-move.rs
@@ -0,0 +1,30 @@
+// issue #46314
+
+#![feature(decl_macro)]
+
+#[derive(Debug)]
+struct NonCopy(String);
+
+struct Foo {
+ x: NonCopy,
+}
+
+macro copy_modern($foo: ident) {
+ $foo.x
+}
+
+macro_rules! copy_legacy {
+ ($foo: ident) => {
+ $foo.x //~ ERROR use of moved value: `foo.x`
+ }
+}
+
+fn assert_two_copies(a: NonCopy, b: NonCopy) {
+ println!("Got two copies: {:?}, {:?}", a, b);
+}
+
+fn main() {
+ let foo = Foo { x: NonCopy("foo".into()) };
+ assert_two_copies(copy_modern!(foo), foo.x); //~ ERROR use of moved value: `foo.x`
+ assert_two_copies(copy_legacy!(foo), foo.x); //~ ERROR use of moved value: `foo.x`
+}