//@ edition:2018

fn dummy() -> i32 { 42 }

fn extra_semicolon() {
    let _ = match true { //~ NOTE `match` arms have incompatible types
        true => {
            dummy(); //~ NOTE this is found to be
            //~^ HELP consider removing this semicolon
        }
        false => dummy(), //~ ERROR `match` arms have incompatible types
        //~^ NOTE expected `()`, found `i32`
    };
}

async fn async_dummy() {}

async fn async_dummy2() {}

async fn async_extra_semicolon_same() {
    let _ = match true { //~ NOTE `match` arms have incompatible types
        true => {
            async_dummy(); //~ NOTE this is found to be
            //~^ HELP consider removing this semicolon
        }
        false => async_dummy(), //~ ERROR `match` arms 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 _ = match true { //~ NOTE `match` arms have incompatible types
        true => {
            async_dummy(); //~ NOTE this is found to be
            //~^ HELP consider removing this semicolon
        }
        false => async_dummy2(), //~ ERROR `match` arms 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 _ = match true { //~ NOTE `match` arms have incompatible types
        true => async_dummy(), //~ NOTE this is found to be
        //~| HELP consider `await`ing on both `Future`s
        false => async_dummy2(), //~ ERROR `match` arms have incompatible types
        //~^ NOTE expected future, found a different future
        //~| NOTE distinct uses of `impl Trait` result in different opaque types
    };
}

fn main() {}
