]> git.lizzy.rs Git - rust.git/blob - src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs
Convert most code to new inner attribute syntax.
[rust.git] / src / test / compile-fail / borrowck-loan-rcvr-overloaded-op.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 #![feature(managed_boxes)]
12
13 struct Point {
14     x: int,
15     y: int,
16 }
17
18 impl Add<int,int> for Point {
19     fn add(&self, z: &int) -> int {
20         self.x + self.y + (*z)
21     }
22 }
23
24 impl Point {
25     pub fn times(&self, z: int) -> int {
26         self.x * self.y * z
27     }
28 }
29
30 fn a() {
31     let mut p = Point {x: 3, y: 4};
32
33     // ok (we can loan out rcvr)
34     p + 3;
35     p.times(3);
36 }
37
38 fn b() {
39     let mut p = Point {x: 3, y: 4};
40
41     // Here I create an outstanding loan and check that we get conflicts:
42
43     let q = &mut p;
44
45     p + 3;  //~ ERROR cannot borrow `p`
46     p.times(3); //~ ERROR cannot borrow `p`
47
48     *q + 3; // OK to use the new alias `q`
49     q.x += 1; // and OK to mutate it
50 }
51
52 fn main() {
53 }