// A test case for #2548.

struct foo {
    x: @mut int,


    drop {
        io::println("Goodbye, World!");
        *self.x += 1;
    }
}

fn foo(x: @mut int) -> foo {
    foo { x: x }
}

fn main() {
    let x = @mut 0;

    {
        let mut res = foo(x);
        
        let mut v = ~[mut];
        v <- ~[mut res] + v; //~ ERROR instantiating a type parameter with an incompatible type (needs `copy`, got `owned`, missing `copy`)
        assert (v.len() == 2);
    }

    assert *x == 1;
}
