2014-10-12 22:00:45 -05:00
|
|
|
// Test method calls with self as an argument cannot subvert borrow checking.
|
|
|
|
|
2018-08-14 18:16:05 -05:00
|
|
|
|
|
|
|
|
2014-10-12 22:00:45 -05:00
|
|
|
struct Foo;
|
|
|
|
|
|
|
|
impl Foo {
|
|
|
|
fn bar(&self) {}
|
|
|
|
fn baz(&mut self) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut x = Foo;
|
|
|
|
let y = &mut x;
|
|
|
|
Foo::bar(&x); //~ERROR cannot borrow `x`
|
2018-08-14 18:16:05 -05:00
|
|
|
y.use_mut();
|
2014-10-12 22:00:45 -05:00
|
|
|
|
2015-01-20 07:56:53 -06:00
|
|
|
let mut x = Foo;
|
|
|
|
let y = &mut x;
|
|
|
|
Foo::baz(&mut x); //~ERROR cannot borrow `x`
|
2018-08-14 18:16:05 -05:00
|
|
|
y.use_mut();
|
2014-10-12 22:00:45 -05:00
|
|
|
}
|
2018-08-14 18:16:05 -05:00
|
|
|
|
|
|
|
trait Fake { fn use_mut(&mut self) { } fn use_ref(&self) { } }
|
|
|
|
impl<T> Fake for T { }
|