]> git.lizzy.rs Git - rust.git/blob - tests/ui/borrowck/borrowck-uniq-via-lend.rs
Rollup merge of #107615 - notriddle:notriddle/nbsp, r=GuillaumeGomez
[rust.git] / tests / ui / borrowck / borrowck-uniq-via-lend.rs
1 fn borrow(_v: &isize) {}
2
3
4
5
6
7 fn local() {
8     let mut v: Box<_> = Box::new(3);
9     borrow(&*v);
10 }
11
12 fn local_rec() {
13     struct F { f: Box<isize> }
14     let mut v = F {f: Box::new(3)};
15     borrow(&*v.f);
16 }
17
18 fn local_recs() {
19     struct F { f: G }
20     struct G { g: H }
21     struct H { h: Box<isize> }
22     let mut v = F {f: G {g: H {h: Box::new(3)}}};
23     borrow(&*v.f.g.h);
24 }
25
26 fn aliased_imm() {
27     let mut v: Box<_> = Box::new(3);
28     let w = &v;
29     borrow(&*v);
30     w.use_ref();
31 }
32
33 fn aliased_mut() {
34     let mut v: Box<_> = Box::new(3);
35     let w = &mut v;
36     borrow(&*v); //~ ERROR cannot borrow `*v`
37     w.use_mut();
38 }
39
40 fn aliased_other() {
41     let mut v: Box<_> = Box::new(3);
42     let mut w: Box<_> = Box::new(4);
43     let x = &mut w;
44     borrow(&*v);
45     x.use_mut();
46 }
47
48 fn aliased_other_reassign() {
49     let mut v: Box<_> = Box::new(3);
50     let mut w: Box<_> = Box::new(4);
51     let mut x = &mut w;
52     x = &mut v;
53     borrow(&*v); //~ ERROR cannot borrow `*v`
54     x.use_mut();
55 }
56
57 fn main() {
58 }
59
60 trait Fake { fn use_mut(&mut self) { } fn use_ref(&self) { }  }
61 impl<T> Fake for T { }