//@ edition:2018

fn dummy() -> i32 {
    42
}

fn extra_semicolon() {
    let _ = if true {
        //~^ NOTE `if` and `else` have incompatible types
        dummy(); //~ NOTE expected because of this
        //~^ HELP consider removing this semicolon
    } else {
        dummy() //~ ERROR `if` and `else` have incompatible types
        //~^ NOTE expected `()`, found `i32`
    };
}

async fn async_dummy() {}

async fn async_dummy2() {}

async fn async_extra_semicolon_same() {
    let _ = if true {
        //~^ NOTE `if` and `else` have incompatible types
        async_dummy(); //~ NOTE expected because of this
        //~^ HELP consider removing this semicolon
    } else {
        async_dummy() //~ ERROR `if` and `else` have incompatible types
        //~^ NOTE expected `()`, found future
        //~| NOTE calling an async function returns a future
        //~| HELP consider `await`ing on the `Future`
    };
}

async fn async_extra_semicolon_different() {
    let _ = if true {
        //~^ NOTE `if` and `else` have incompatible types
        async_dummy(); //~ NOTE expected because of this
        //~^ HELP consider removing this semicolon
    } else {
        async_dummy2() //~ ERROR `if` and `else` have incompatible types
        //~^ NOTE expected `()`, found future
        //~| NOTE calling an async function returns a future
        //~| HELP consider `await`ing on the `Future`
    };
}

async fn async_different_futures() {
    let _ = if true {
        //~^ NOTE `if` and `else` have incompatible types
        async_dummy() //~ NOTE expected because of this
        //~| HELP consider `await`ing on both `Future`s
    } else {
        async_dummy2() //~ ERROR `if` and `else` have incompatible types
        //~^ NOTE expected future, found a different future
        //~| NOTE distinct uses of `impl Trait` result in different opaque types
    };
}

fn main() {}
