]> git.lizzy.rs Git - rust.git/blob - src/test/compile-fail/borrowck-multiple-captures.rs
doc: remove incomplete sentence
[rust.git] / src / test / compile-fail / borrowck-multiple-captures.rs
1 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 use std::task;
12
13 fn borrow<T>(_: &T) { }
14
15 fn different_vars_after_borrows() {
16     let x1 = box 1i;
17     let p1 = &x1;
18     let x2 = box 2i;
19     let p2 = &x2;
20     task::spawn(move|| {
21         drop(x1); //~ ERROR cannot move `x1` into closure because it is borrowed
22         drop(x2); //~ ERROR cannot move `x2` into closure because it is borrowed
23     });
24     borrow(&*p1);
25     borrow(&*p2);
26 }
27
28 fn different_vars_after_moves() {
29     let x1 = box 1i;
30     drop(x1);
31     let x2 = box 2i;
32     drop(x2);
33     task::spawn(move|| {
34         drop(x1); //~ ERROR capture of moved value: `x1`
35         drop(x2); //~ ERROR capture of moved value: `x2`
36     });
37 }
38
39 fn same_var_after_borrow() {
40     let x = box 1i;
41     let p = &x;
42     task::spawn(move|| {
43         drop(x); //~ ERROR cannot move `x` into closure because it is borrowed
44         drop(x); //~ ERROR use of moved value: `x`
45     });
46     borrow(&*p);
47 }
48
49 fn same_var_after_move() {
50     let x = box 1i;
51     drop(x);
52     task::spawn(move|| {
53         drop(x); //~ ERROR capture of moved value: `x`
54         drop(x); //~ ERROR use of moved value: `x`
55     });
56 }
57
58 fn main() {
59     different_vars_after_borrows();
60     different_vars_after_moves();
61     same_var_after_borrow();
62     same_var_after_move();
63 }
64