#![feature(let_chains)]

fn main() {
    let opt = Some(1i32);

    let Some(n) = opt else {
        return;
    };
    let Some(n) = opt && n == 1 else {
    //~^ ERROR a `&&` expression cannot be directly assigned in `let...else`
    //~| ERROR mismatched types
    //~| ERROR mismatched types
        return;
    };
    let Some(n) = opt && let another = n else {
    //~^ ERROR a `&&` expression cannot be directly assigned in `let...else`
    //~| ERROR mismatched types
    //~| ERROR mismatched types
    //~| ERROR expected expression, found `let` statement
        return;
    };

    if let Some(n) = opt else {
    //~^ ERROR this `if` expression is missing a block after the condition
        return;
    };
    if let Some(n) = opt && n == 1 else {
    //~^ ERROR this `if` expression is missing a block after the condition
        return;
    };
    if let Some(n) = opt && let another = n else {
    //~^ ERROR this `if` expression is missing a block after the condition
        return;
    };

    {
        while let Some(n) = opt else {
        //~^ ERROR expected `{`, found keyword `else`
            return;
        };
    }
    {
        while let Some(n) = opt && n == 1 else {
        //~^ ERROR expected `{`, found keyword `else`
            return;
        };
    }
    {
        while let Some(n) = opt && let another = n else {
        //~^ ERROR expected `{`, found keyword `else`
            return;
        };
    }
}
