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.
21 fn make_foo() -> Foo { panic!() }
23 fn borrow_same_field_twice_mut_mut() {
24 let mut foo = make_foo();
25 let bar1 = &mut foo.bar1;
26 let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow
30 fn borrow_same_field_twice_mut_imm() {
31 let mut foo = make_foo();
32 let bar1 = &mut foo.bar1;
33 let _bar2 = &foo.bar1; //~ ERROR cannot borrow
37 fn borrow_same_field_twice_imm_mut() {
38 let mut foo = make_foo();
40 let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow
44 fn borrow_same_field_twice_imm_imm() {
45 let mut foo = make_foo();
47 let _bar2 = &foo.bar1;
51 fn borrow_both_mut() {
52 let mut foo = make_foo();
53 let bar1 = &mut foo.bar1;
54 let _bar2 = &mut foo.bar2;
58 fn borrow_both_mut_pattern() {
59 let mut foo = make_foo();
61 Foo { bar1: ref mut _bar1, bar2: ref mut _bar2 } => {}
65 fn borrow_var_and_pattern() {
66 let mut foo = make_foo();
67 let bar1 = &mut foo.bar1;
69 Foo { bar1: ref mut _bar1, bar2: _ } => {} //
70 //~^ ERROR cannot borrow
75 fn borrow_mut_and_base_imm() {
76 let mut foo = make_foo();
77 let bar1 = &mut foo.bar1.int1;
78 let _foo1 = &foo.bar1; //~ ERROR cannot borrow
79 let _foo2 = &foo; //~ ERROR cannot borrow
83 fn borrow_mut_and_base_mut() {
84 let mut foo = make_foo();
85 let bar1 = &mut foo.bar1.int1;
86 let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow
90 fn borrow_mut_and_base_mut2() {
91 let mut foo = make_foo();
92 let bar1 = &mut foo.bar1.int1;
93 let _foo2 = &mut foo; //~ ERROR cannot borrow
97 fn borrow_imm_and_base_mut() {
98 let mut foo = make_foo();
99 let bar1 = &foo.bar1.int1;
100 let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow
104 fn borrow_imm_and_base_mut2() {
105 let mut foo = make_foo();
106 let bar1 = &foo.bar1.int1;
107 let _foo2 = &mut foo; //~ ERROR cannot borrow
111 fn borrow_imm_and_base_imm() {
112 let mut foo = make_foo();
113 let bar1 = &foo.bar1.int1;
114 let _foo1 = &foo.bar1;
119 fn borrow_mut_and_imm() {
120 let mut foo = make_foo();
121 let bar1 = &mut foo.bar1;
122 let _foo1 = &foo.bar2;
126 fn borrow_mut_from_imm() {
127 let foo = make_foo();
128 let bar1 = &mut foo.bar1; //~ ERROR cannot borrow
132 fn borrow_long_path_both_mut() {
133 let mut foo = make_foo();
134 let bar1 = &mut foo.bar1.int1;
135 let _foo1 = &mut foo.bar2.int2;