// error-pattern:borrowed

// Test that write guards trigger when there is a coercion to
// a slice on the receiver of a method.

trait MyMutSlice {
    fn my_mut_slice(self) -> Self;
}

impl<'self, T> MyMutSlice for &'self mut [T] {
    fn my_mut_slice(self) -> &'self mut [T] {
        self
    }
}

trait MySlice {
    fn my_slice(self) -> Self;
}

impl<'self, T> MySlice for &'self [T] {
    fn my_slice(self) -> &'self [T] {
        self
    }
}

fn add(x:&mut [int], y:&[int])
{
    x[0] = x[0] + y[0];
}

pub fn main()
{
    let z = @mut [1,2,3];
    let z2 = z;
    add(z.my_mut_slice(), z2.my_slice());
    printfln!("%d", z[0]);
}
