aboutsummaryrefslogtreecommitdiffstats
path: root/tests/compile-fail/mutable.rs
diff options
context:
space:
mode:
authorBrian Cully <bjc@kublai.com>2019-04-28 13:41:39 -0400
committerBrian Cully <bjc@kublai.com>2019-05-10 11:42:02 -0400
commitf12811a0a5e15b596a0cc06c095832a6b795172b (patch)
treeec3dbfffad3556d81c5b04d07a6ac711cef15589 /tests/compile-fail/mutable.rs
downloadclint-f12811a0a5e15b596a0cc06c095832a6b795172b.tar.gz
clint-f12811a0a5e15b596a0cc06c095832a6b795172b.zip
Working handler code.v0.1.0
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);
+}