// Checks for `if` expressions with respect to default match bindings.
// Specifically, we do not accept `if cond { ... }` where `cond: &mut? bool`.
// Meanwhile, `match cond { true => ..., _ => ... }` does accept that.

// FIXME(@rust-lang/lang-team): consider relaxing this?

fn b_ref<'a>() -> &'a bool { &true }
fn b_mut_ref<'a>() -> &'a mut bool { &mut true }
//~^ ERROR: cannot return reference to temporary

fn main() {
    // This is OK:
    match b_ref() { true => {}, _ => {} }
    match b_mut_ref() { true => {}, _ => {} }
    match &true { true => {}, _ => {} }
    match &mut true { true => {}, _ => {} }

    // This is NOT:
    if b_ref() {} //~ ERROR mismatched types [E0308]
    if b_mut_ref() {} //~ ERROR mismatched types [E0308]
    if &true {} //~ ERROR mismatched types [E0308]
    if &mut true {} //~ ERROR mismatched types [E0308]

    // This is also NOT:
    while b_ref() {} //~ ERROR mismatched types [E0308]
    while b_mut_ref() {} //~ ERROR mismatched types [E0308]
    while &true {} //~ ERROR mismatched types [E0308]
    while &mut true {} //~ ERROR mismatched types [E0308]
}
