aboutsummaryrefslogtreecommitdiffstats
path: root/tests/compile-fail/mutable.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/compile-fail/mutable.rs')
-rw-r--r--tests/compile-fail/mutable.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/compile-fail/mutable.rs b/tests/compile-fail/mutable.rs
new file mode 100644
index 0000000..e888503
--- /dev/null
+++ b/tests/compile-fail/mutable.rs
@@ -0,0 +1,51 @@
+extern crate clint;
+
+use clint::Handler;
+
+static mut HANDLER: Handler = Handler::new();
+
+fn main() {
+ need_move();
+ borrow_error();
+ no_borrow_needed();
+}
+
+fn need_move() {
+ let x = vec![1, 2, 3];
+ let c = || {
+ //~^ ERROR closure may outlive
+ println!("x(h-c): {:?}", x);
+ };
+ unsafe {
+ HANDLER.replace(&c);
+ HANDLER.call();
+ HANDLER.call();
+ }
+ println!("x(h-o): {:?}", x);
+}
+
+fn borrow_error() {
+ let x = vec![1, 2, 3];
+ let c = move || {
+ println!("x(h-c): {:?}", x);
+ };
+ unsafe {
+ HANDLER.replace(&c);
+ HANDLER.call();
+ HANDLER.call();
+ }
+ println!("x(h-o): {:?}", x); //~ ERROR borrow of moved value
+}
+
+fn no_borrow_needed() {
+ let x = vec![1, 2, 3];
+ let c = || {
+ println!("x(h-c): hi!");
+ };
+ unsafe {
+ HANDLER.replace(&c);
+ HANDLER.call();
+ HANDLER.call();
+ }
+ println!("x(h-o): {:?}", x);
+}