]> git.proxmox.com Git - rustc.git/blame - src/test/ui/borrowck/borrowck-object-lifetime.rs
Update unsuspicious file list
[rustc.git] / src / test / ui / borrowck / borrowck-object-lifetime.rs
CommitLineData
1a4d82fc
JJ
1// Test that borrows that occur due to calls to object methods
2// properly "claim" the object path.
3
b7449926
XL
4
5
1a4d82fc
JJ
6trait Foo {
7 fn borrowed(&self) -> &();
8 fn mut_borrowed(&mut self) -> &();
9}
10
dc9dc135 11fn borrowed_receiver(x: &dyn Foo) {
b7449926
XL
12 let y = x.borrowed();
13 let z = x.borrowed();
14 z.use_ref();
15 y.use_ref();
1a4d82fc
JJ
16}
17
dc9dc135 18fn mut_borrowed_receiver(x: &mut dyn Foo) {
b7449926
XL
19 let y = x.borrowed();
20 let z = x.mut_borrowed(); //~ ERROR cannot borrow
21 y.use_ref();
1a4d82fc
JJ
22}
23
dc9dc135 24fn mut_owned_receiver(mut x: Box<dyn Foo>) {
b7449926
XL
25 let y = x.borrowed();
26 let z = &mut x; //~ ERROR cannot borrow
27 y.use_ref();
1a4d82fc
JJ
28}
29
dc9dc135 30fn imm_owned_receiver(mut x: Box<dyn Foo>) {
b7449926
XL
31 let y = x.borrowed();
32 let z = &x;
33 z.use_ref();
34 y.use_ref();
1a4d82fc
JJ
35}
36
37fn main() {}
b7449926
XL
38
39trait Fake { fn use_mut(&mut self) { } fn use_ref(&self) { } }
40impl<T> Fake for T { }