about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/compile-fail/copy-into-closure.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/test/compile-fail/copy-into-closure.rs b/src/test/compile-fail/copy-into-closure.rs
new file mode 100644
index 00000000000..8ee2a4fd3ae
--- /dev/null
+++ b/src/test/compile-fail/copy-into-closure.rs
@@ -0,0 +1,39 @@
+fn closure1(+x: ~str) -> (~str, fn@() -> ~str) {
+    let f = fn@() -> ~str {
+        copy x
+        //~^ WARNING implicitly copying a non-implicitly-copyable value
+        //~^^ NOTE to copy values into a @fn closure, use a capture clause
+    };
+    (x,f)
+}
+
+fn closure2(+x: util::NonCopyable) -> (util::NonCopyable,
+                                       fn@() -> util::NonCopyable) {
+    let f = fn@() -> util::NonCopyable {
+        copy x
+        //~^ ERROR copying a noncopyable value
+        //~^^ NOTE non-copyable value cannot be copied into a @fn closure
+        //~^^^ ERROR copying a noncopyable value
+    };
+    (x,f)
+}
+fn closure3(+x: util::NonCopyable) {
+    do task::spawn {
+        let s = copy x;
+        //~^ ERROR copying a noncopyable value
+        //~^^ NOTE non-copyable value cannot be copied into a ~fn closure
+        //~^^^ ERROR copying a noncopyable value
+        error!("%?", s);
+    }
+    error!("%?", x);
+}
+fn main() {
+    let x = ~"hello";
+    do task::spawn {
+        let s = copy x;
+        //~^ WARNING implicitly copying a non-implicitly-copyable value
+        //~^^ NOTE to copy values into a ~fn closure, use a capture clause
+        error!("%s from child", s);
+    }
+    error!("%s", x);
+}