File tree 3 files changed +75
-0
lines changed
3 files changed +75
-0
lines changed Original file line number Diff line number Diff line change
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
+ #![ feature( unboxed_closures) ]
12
+
13
+ // Test that an unboxed closure that captures a free variable by
14
+ // reference cannot escape the region of that variable.
15
+ fn main ( ) {
16
+ let _f = {
17
+ let x = 0 u;
18
+ |: | x //~ ERROR cannot infer an appropriate lifetime due to conflicting requirements
19
+ } ;
20
+ }
Original file line number Diff line number Diff line change
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
+ #![ feature( unboxed_closures) ]
12
+
13
+ // Test that an unboxed closure that mutates a free variable will
14
+ // cause borrow conflicts.
15
+
16
+ fn main ( ) {
17
+ let mut x = 0 u;
18
+ let f = |: | x += 1 ;
19
+ let _y = x; //~ ERROR cannot use `x` because it was mutably borrowed
20
+ }
Original file line number Diff line number Diff line change
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
+ #![ feature( overloaded_calls, unboxed_closures) ]
12
+
13
+ // Test by-ref capture of environment in unboxed closure types
14
+
15
+ fn call_fn < F : Fn ( ) > ( f : F ) {
16
+ f ( )
17
+ }
18
+
19
+ fn call_fn_mut < F : FnMut ( ) > ( mut f : F ) {
20
+ f ( )
21
+ }
22
+
23
+ fn call_fn_once < F : FnOnce ( ) > ( f : F ) {
24
+ f ( )
25
+ }
26
+
27
+ fn main ( ) {
28
+ let mut x = 0 u;
29
+ let y = 2 u;
30
+
31
+ call_fn( |& : | x += y) ;
32
+ call_fn_mut( |& mut : | x += y) ;
33
+ call_fn_once( |: | x += y) ;
34
+ assert_eq ! ( x, y * 3 ) ;
35
+ }
You can’t perform that action at this time.
0 commit comments