]> git.lizzy.rs Git - rust.git/blob - tests/ui/borrowck/borrowck-borrow-from-owned-ptr.rs
Rollup merge of #106726 - cmorin6:fix-comment-typos, r=Nilstrieb
[rust.git] / tests / ui / borrowck / borrowck-borrow-from-owned-ptr.rs
1 #[derive(Copy, Clone)]
2 struct Foo {
3   bar1: Bar,
4   bar2: Bar
5 }
6
7 #[derive(Copy, Clone)]
8 struct Bar {
9   int1: isize,
10   int2: isize,
11 }
12
13 fn make_foo() -> Box<Foo> { panic!() }
14
15 fn borrow_same_field_twice_mut_mut() {
16     let mut foo = make_foo();
17     let bar1 = &mut foo.bar1;
18     let _bar2 = &mut foo.bar1;  //~ ERROR cannot borrow
19     *bar1;
20 }
21
22 fn borrow_same_field_twice_mut_imm() {
23     let mut foo = make_foo();
24     let bar1 = &mut foo.bar1;
25     let _bar2 = &foo.bar1;  //~ ERROR cannot borrow
26     *bar1;
27 }
28
29 fn borrow_same_field_twice_imm_mut() {
30     let mut foo = make_foo();
31     let bar1 = &foo.bar1;
32     let _bar2 = &mut foo.bar1;  //~ ERROR cannot borrow
33     *bar1;
34 }
35
36 fn borrow_same_field_twice_imm_imm() {
37     let mut foo = make_foo();
38     let bar1 = &foo.bar1;
39     let _bar2 = &foo.bar1;
40     *bar1;
41 }
42
43 fn borrow_both_fields_mut() {
44     let mut foo = make_foo();
45     let bar1 = &mut foo.bar1;
46     let _bar2 = &mut foo.bar2;
47     *bar1;
48 }
49
50 fn borrow_both_mut_pattern() {
51     let mut foo = make_foo();
52     match *foo {
53         Foo { bar1: ref mut _bar1, bar2: ref mut _bar2 } => {
54             *_bar1;
55             *_bar2;
56         }
57     }
58 }
59
60 fn borrow_var_and_pattern() {
61     let mut foo = make_foo();
62     let bar1 = &mut foo.bar1;
63     match *foo {
64         Foo { bar1: ref mut _bar1, bar2: _ } => {}
65         //~^ ERROR cannot borrow
66     }
67     *bar1;
68 }
69
70 fn borrow_mut_and_base_imm() {
71     let mut foo = make_foo();
72     let bar1 = &mut foo.bar1.int1;
73     let _foo1 = &foo.bar1; //~ ERROR cannot borrow
74     let _foo2 = &*foo; //~ ERROR cannot borrow
75     *bar1;
76 }
77
78 fn borrow_mut_and_base_mut() {
79     let mut foo = make_foo();
80     let bar1 = &mut foo.bar1.int1;
81     let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow
82     *bar1;
83 }
84
85 fn borrow_mut_and_base_mut2() {
86     let mut foo = make_foo();
87     let bar1 = &mut foo.bar1.int1;
88     let _foo2 = &mut *foo; //~ ERROR cannot borrow
89     *bar1;
90 }
91
92 fn borrow_imm_and_base_mut() {
93     let mut foo = make_foo();
94     let bar1 = &foo.bar1.int1;
95     let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow
96     *bar1;
97 }
98
99 fn borrow_imm_and_base_mut2() {
100     let mut foo = make_foo();
101     let bar1 = &foo.bar1.int1;
102     let _foo2 = &mut *foo; //~ ERROR cannot borrow
103     *bar1;
104 }
105
106 fn borrow_imm_and_base_imm() {
107     let mut foo = make_foo();
108     let bar1 = &foo.bar1.int1;
109     let _foo1 = &foo.bar1;
110     let _foo2 = &*foo;
111     *bar1;
112 }
113
114 fn borrow_mut_and_imm() {
115     let mut foo = make_foo();
116     let bar1 = &mut foo.bar1;
117     let _foo1 = &foo.bar2;
118 }
119
120 fn borrow_mut_from_imm() {
121     let foo = make_foo();
122     let bar1 = &mut foo.bar1; //~ ERROR cannot borrow
123     *bar1;
124 }
125
126 fn borrow_long_path_both_mut() {
127     let mut foo = make_foo();
128     let bar1 = &mut foo.bar1.int1;
129     let foo1 = &mut foo.bar2.int2;
130     *bar1;
131     *foo1;
132 }
133
134 fn main() {}