//@ run-rustfix
//@ rustfix-only-machine-applicable
#![allow(unused_variables)]
#![allow(dead_code)]
#![allow(unused_must_use)]

fn foo() -> i32 {
    ({2}) + {2} //~ ERROR expected expression, found `+`
    //~^ ERROR mismatched types
}

fn bar() -> i32 {
    ({2}) + 2 //~ ERROR leading `+` is not supported
    //~^ ERROR mismatched types
}

fn zul() -> u32 {
    let foo = 3;
    ({ 42 }) + foo; //~ ERROR expected expression, found `+`
    //~^ ERROR mismatched types
    32
}

fn baz() -> i32 {
    ({ 3 }) * 3 //~ ERROR type `{integer}` cannot be dereferenced
    //~^ ERROR mismatched types
}

fn moo(x: u32) -> bool {
    (match x {
        _ => 1,
    }) > 0 //~ ERROR expected expression
}

fn qux() -> u32 {
    ({2}) - 2 //~ ERROR cannot apply unary operator `-` to type `u32`
    //~^ ERROR mismatched types
}

fn space_cadet() -> bool {
    ({ true }) | { true } //~ ERROR E0308
    //~^ ERROR expected parameter name
}

fn revenge_from_mars() -> bool {
    ({ true }) && { true } //~ ERROR E0308
    //~^ ERROR mismatched types
}

fn attack_from_mars() -> bool {
    ({ true }) || { true } //~ ERROR E0308
    //~^ ERROR mismatched types
}

// This gets corrected by adding a semicolon, instead of parens.
// It's placed here to help keep track of the way this diagnostic
// needs to interact with type checking to avoid MachineApplicable
// suggestions that actually break stuff.
//
// If you're wondering what happens if that `foo()` is a `true` like
// all the ones above use? Nothing. It makes neither suggestion in
// that case.
fn asteroids() -> impl FnOnce() -> bool {
    { foo(); } || { true } //~ ERROR E0308
}

// https://github.com/rust-lang/rust/issues/105179
fn r#match() -> i32 {
    (match () { () => 1 }) + match () { () => 1 } //~ ERROR expected expression, found `+`
    //~^ ERROR mismatched types
}

// https://github.com/rust-lang/rust/issues/102171
fn r#unsafe() -> i32 {
    (unsafe { 1 }) + unsafe { 1 } //~ ERROR expected expression, found `+`
    //~^ ERROR mismatched types
}

fn main() {}
