//! 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
