//@ run-pass
// Test that when we write `x.foo()`, we do not have to know the
// complete type of `x` in order to type-check the method call. In
// this case, we know that `x: Vec<_1>`, but we don't know what type
// `_1` is (because the call to `push` comes later). To pick between
// the impls, we would have to know `_1`, since we have to know
// whether `_1: MyCopy` or `_1 == Box<i32>`.  However (and this is the
// point of the test), we don't have to pick between the two impls --
// it is enough to know that `foo` comes from the `Foo` trait. We can
// codegen the call as `Foo::foo(&x)` and let the specific impl get
// chosen later.

trait Foo {
    fn foo(&self) -> isize;
}

trait MyCopy { fn foo(&self) { } } //~ WARN method `foo` is never used
impl MyCopy for i32 { }

impl<T:MyCopy> Foo for Vec<T> {
    fn foo(&self) -> isize {1}
}

impl Foo for Vec<Box<i32>> {
    fn foo(&self) -> isize {2}
}

fn call_foo_copy() -> isize {
    let mut x = Vec::new();
    let y = x.foo();
    x.push(0_i32);
    y
}

fn call_foo_other() -> isize {
    let mut x: Vec<_> = Vec::new();
    let y = x.foo();
    let z: Box<i32> = Box::new(0);
    x.push(z);
    y
}

fn main() {
    assert_eq!(call_foo_copy(), 1);
    assert_eq!(call_foo_other(), 2);
}
