]> git.lizzy.rs Git - rust.git/commitdiff
Regression test for #46314
authorValentine Valyaeff <valentine.valyaeff@gmail.com>
Wed, 4 Apr 2018 08:36:38 +0000 (11:36 +0300)
committerValentine Valyaeff <valentine.valyaeff@gmail.com>
Wed, 4 Apr 2018 08:36:38 +0000 (11:36 +0300)
src/test/ui/nll/decl-macro-illegal-copy.rs [new file with mode: 0644]
src/test/ui/nll/decl-macro-illegal-copy.stderr [new file with mode: 0644]

diff --git a/src/test/ui/nll/decl-macro-illegal-copy.rs b/src/test/ui/nll/decl-macro-illegal-copy.rs
new file mode 100644 (file)
index 0000000..1525791
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Regression test for #46314
+
+#![feature(nll)]
+#![feature(decl_macro)]
+
+struct NonCopy(String);
+
+struct Wrapper {
+    inner: NonCopy,
+}
+
+macro inner_copy($wrapper:ident) {
+    $wrapper.inner
+}
+
+fn main() {
+    let wrapper = Wrapper {
+        inner: NonCopy("foo".into()),
+    };
+    assert_two_non_copy(
+        inner_copy!(wrapper),
+        wrapper.inner,
+        //~^ ERROR use of moved value: `wrapper.inner` [E0382]
+    );
+}
+
+fn assert_two_non_copy(a: NonCopy, b: NonCopy) {
+    assert_eq!(a.0, b.0);
+}
diff --git a/src/test/ui/nll/decl-macro-illegal-copy.stderr b/src/test/ui/nll/decl-macro-illegal-copy.stderr
new file mode 100644 (file)
index 0000000..8bc25c2
--- /dev/null
@@ -0,0 +1,14 @@
+error[E0382]: use of moved value: `wrapper.inner`
+  --> $DIR/decl-macro-illegal-copy.rs:32:9
+   |
+LL |     $wrapper.inner
+   |     -------------- value moved here
+...
+LL |         wrapper.inner,
+   |         ^^^^^^^^^^^^^ value used here after move
+   |
+   = note: move occurs because `wrapper.inner` has type `NonCopy`, which does not implement the `Copy` trait
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.