| //! Checks that method availability rules for trait objects depend on receiver type. | 
 |  | 
 | trait Foo { | 
 |     fn borrowed(&self); | 
 |     fn borrowed_mut(&mut self); | 
 |     fn owned(self: Box<Self>); | 
 | } | 
 |  | 
 | fn borrowed_receiver(x: &dyn Foo) { | 
 |     x.borrowed(); | 
 |     x.borrowed_mut(); // See [1] | 
 |     x.owned(); //~ ERROR no method named `owned` found | 
 | } | 
 |  | 
 | fn borrowed_mut_receiver(x: &mut dyn Foo) { | 
 |     x.borrowed(); | 
 |     x.borrowed_mut(); | 
 |     x.owned(); //~ ERROR no method named `owned` found | 
 | } | 
 |  | 
 | fn owned_receiver(x: Box<dyn Foo>) { | 
 |     x.borrowed(); | 
 |     x.borrowed_mut(); // See [1] | 
 |     x.managed(); //~ ERROR no method named `managed` found | 
 |     x.owned(); | 
 | } | 
 |  | 
 | fn main() {} | 
 |  | 
 | // [1]: These cases are illegal, but the error is not detected | 
 | // until borrowck, so see the test borrowck-object-mutability.rs |