File tree Expand file tree Collapse file tree 3 files changed +75
-0
lines changed Expand file tree Collapse file tree 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