#![feature(or_patterns)]

const fn foo((Ok(a) | Err(a)): Result<i32, i32>) {
    //~^ ERROR or-pattern is not allowed in a `const fn`
    let x = Ok(3);
    let Ok(y) | Err(y) = x;
    //~^ ERROR or-pattern is not allowed in a `const fn`
}

const X: () = {
    let x = Ok(3);
    let Ok(y) | Err(y) = x;
    //~^ ERROR or-pattern is not allowed in a `const`
};

static Y: () = {
    let x = Ok(3);
    let Ok(y) | Err(y) = x;
    //~^ ERROR or-pattern is not allowed in a `static`
};

static mut Z: () = {
    let x = Ok(3);
    let Ok(y) | Err(y) = x;
    //~^ ERROR or-pattern is not allowed in a `static mut`
};

fn main() {
    let _: [(); {
        let x = Ok(3);
        let Ok(y) | Err(y) = x;
        //~^ ERROR or-pattern is not allowed in a `const`
        //~| ERROR constant contains unimplemented expression type
        //~| ERROR constant contains unimplemented expression type
        2
    }];
}
