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.
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.
25 fn make_foo() -> Foo { panic!() }
27 fn borrow_same_field_twice_mut_mut() {
28 let mut foo = make_foo();
29 let bar1 = &mut foo.bar1;
30 let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow
34 fn borrow_same_field_twice_mut_imm() {
35 let mut foo = make_foo();
36 let bar1 = &mut foo.bar1;
37 let _bar2 = &foo.bar1; //~ ERROR cannot borrow
41 fn borrow_same_field_twice_imm_mut() {
42 let mut foo = make_foo();
44 let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow
48 fn borrow_same_field_twice_imm_imm() {
49 let mut foo = make_foo();
51 let _bar2 = &foo.bar1;
55 fn borrow_both_mut() {
56 let mut foo = make_foo();
57 let bar1 = &mut foo.bar1;
58 let _bar2 = &mut foo.bar2;
62 fn borrow_both_mut_pattern() {
63 let mut foo = make_foo();
65 Foo { bar1: ref mut _bar1, bar2: ref mut _bar2 } => {}
69 fn borrow_var_and_pattern() {
70 let mut foo = make_foo();
71 let bar1 = &mut foo.bar1;
73 Foo { bar1: ref mut _bar1, bar2: _ } => {} //
74 //~^ ERROR cannot borrow
79 fn borrow_mut_and_base_imm() {
80 let mut foo = make_foo();
81 let bar1 = &mut foo.bar1.int1;
82 let _foo1 = &foo.bar1; //~ ERROR cannot borrow
83 let _foo2 = &foo; //~ ERROR cannot borrow
87 fn borrow_mut_and_base_mut() {
88 let mut foo = make_foo();
89 let bar1 = &mut foo.bar1.int1;
90 let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow
94 fn borrow_mut_and_base_mut2() {
95 let mut foo = make_foo();
96 let bar1 = &mut foo.bar1.int1;
97 let _foo2 = &mut foo; //~ ERROR cannot borrow
101 fn borrow_imm_and_base_mut() {
102 let mut foo = make_foo();
103 let bar1 = &foo.bar1.int1;
104 let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow
108 fn borrow_imm_and_base_mut2() {
109 let mut foo = make_foo();
110 let bar1 = &foo.bar1.int1;
111 let _foo2 = &mut foo; //~ ERROR cannot borrow
115 fn borrow_imm_and_base_imm() {
116 let mut foo = make_foo();
117 let bar1 = &foo.bar1.int1;
118 let _foo1 = &foo.bar1;
123 fn borrow_mut_and_imm() {
124 let mut foo = make_foo();
125 let bar1 = &mut foo.bar1;
126 let _foo1 = &foo.bar2;
130 fn borrow_mut_from_imm() {
131 let foo = make_foo();
132 let bar1 = &mut foo.bar1; //~ ERROR cannot borrow
136 fn borrow_long_path_both_mut() {
137 let mut foo = make_foo();
138 let bar1 = &mut foo.bar1.int1;
139 let _foo1 = &mut foo.bar2.int2;