//@ run-pass
#![allow(unreachable_code)]

#[derive(PartialEq, Debug)]
struct Bar {
    x: isize
}
impl Drop for Bar {
    fn drop(&mut self) {
        assert_eq!(self.x, 22);
    }
}

#[derive(PartialEq, Debug)]
struct Foo {
    x: Bar,
    a: isize
}

fn foo() -> Result<Foo, isize> {
    return Ok(Foo {
        x: Bar { x: 22 },
        a: return Err(32)
    });
}

fn baz() -> Result<Foo, isize> {
    Ok(Foo {
        x: Bar { x: 22 },
        a: return Err(32)
    })
}

// explicit immediate return
fn aa() -> isize {
    return 3;
}

// implicit immediate return
fn bb() -> isize {
    3
}

// implicit outptr return
fn cc() -> Result<isize, isize> {
    Ok(3)
}

// explicit outptr return
fn dd() -> Result<isize, isize> {
    return Ok(3);
}

trait A {
    fn aaa(&self) -> isize {
        3
    }
    fn bbb(&self) -> isize {
        return 3;
    }
    fn ccc(&self) -> Result<isize, isize> {
        Ok(3)
    }
    fn ddd(&self) -> Result<isize, isize> {
        return Ok(3);
    }
}

impl A for isize {}

fn main() {
    assert_eq!(foo(), Err(32));
    assert_eq!(baz(), Err(32));

    assert_eq!(aa(), 3);
    assert_eq!(bb(), 3);
    assert_eq!(cc().unwrap(), 3);
    assert_eq!(dd().unwrap(), 3);

    let i = Box::new(32isize) as Box<dyn A>;
    assert_eq!(i.aaa(), 3);
    let i = Box::new(32isize) as Box<dyn A>;
    assert_eq!(i.bbb(), 3);
    let i = Box::new(32isize) as Box<dyn A>;
    assert_eq!(i.ccc().unwrap(), 3);
    let i = Box::new(32isize) as Box<dyn A>;
    assert_eq!(i.ddd().unwrap(), 3);
}
