about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Koropoff <bkoropoff@gmail.com>2014-10-14 18:35:40 -0700
committerBrian Koropoff <bkoropoff@gmail.com>2014-10-16 17:29:44 -0700
commitfdd69accd0c9366b882a0e0d93ddb94eee307431 (patch)
treeeb16e751915b7f625e5ea2fd2c0316132e187821 /src
parenta5e1aeb14020a7501c1f1a4780f0626cb6f80a3f (diff)
downloadrust-fdd69accd0c9366b882a0e0d93ddb94eee307431.tar.gz
rust-fdd69accd0c9366b882a0e0d93ddb94eee307431.zip
Add failure tests for moving out of unboxed closure environments
Diffstat (limited to 'src')
-rw-r--r--src/test/compile-fail/unboxed-closure-illegal-move.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/test/compile-fail/unboxed-closure-illegal-move.rs b/src/test/compile-fail/unboxed-closure-illegal-move.rs
new file mode 100644
index 00000000000..9e981f2c9bb
--- /dev/null
+++ b/src/test/compile-fail/unboxed-closure-illegal-move.rs
@@ -0,0 +1,44 @@
+// Copyright 2014 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.
+
+#![feature(unboxed_closures)]
+
+// Tests that we can't move out of an unboxed closure environment
+// if the upvar is captured by ref or the closure takes self by
+// reference.
+
+fn main() {
+    // By-ref cases
+    {
+        let x = box 0u;
+        let f = |&:| drop(x); //~ cannot move
+    }
+    {
+        let x = box 0u;
+        let f = |&mut:| drop(x); //~ cannot move
+    }
+    {
+        let x = box 0u;
+        let f = |:| drop(x); //~ cannot move
+    }
+    // By-value cases
+    {
+        let x = box 0u;
+        let f = move |&:| drop(x); //~ cannot move
+    }
+    {
+        let x = box 0u;
+        let f = move |&mut:| drop(x); //~ cannot move
+    }
+    {
+        let x = box 0u;
+        let f = move |:| drop(x); // this one is ok
+    }
+}