]> git.lizzy.rs Git - rust.git/blob - src/test/compile-fail/borrowck-loan-rcvr.rs
Update compile fail tests to use isize.
[rust.git] / src / test / compile-fail / borrowck-loan-rcvr.rs
1 // Copyright 2012 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
12 struct point { x: isize, y: isize }
13
14 trait methods {
15     fn impurem(&self);
16     fn blockm<F>(&self, f: F) where F: FnOnce();
17 }
18
19 impl methods for point {
20     fn impurem(&self) {
21     }
22
23     fn blockm<F>(&self, f: F) where F: FnOnce() { f() }
24 }
25
26 fn a() {
27     let mut p = point {x: 3, y: 4};
28
29     // Here: it's ok to call even though receiver is mutable, because we
30     // can loan it out.
31     p.impurem();
32
33     // But in this case we do not honor the loan:
34     p.blockm(|| { //~ ERROR cannot borrow `p` as mutable
35         p.x = 10;
36     })
37 }
38
39 fn b() {
40     let mut p = point {x: 3, y: 4};
41
42     // Here I create an outstanding loan and check that we get conflicts:
43
44     let l = &mut p;
45     p.impurem(); //~ ERROR cannot borrow
46
47     l.x += 1;
48 }
49
50 fn main() {
51 }