//! Regression test for <https://github.com/rust-lang/rust/issues/5100>
//@ dont-require-annotations: NOTE

#![feature(box_patterns)]

enum A { B, C }

fn main() {
    match (true, false) {
        A::B => (),
//~^ ERROR mismatched types
//~| NOTE expected `(bool, bool)`, found `A`
//~| NOTE expected tuple `(bool, bool)`
//~| NOTE found enum `A`
        _ => ()
    }

    match (true, false) {
        (true, false, false) => ()
//~^ ERROR mismatched types
//~| NOTE expected a tuple with 2 elements, found one with 3 elements
//~| NOTE expected tuple `(bool, bool)`
//~| NOTE found tuple `(_, _, _)`
    }

    match (true, false) {
        (true, false, false) => ()
//~^ ERROR mismatched types
//~| NOTE expected a tuple with 2 elements, found one with 3 elements
//~| NOTE expected tuple `(bool, bool)`
//~| NOTE found tuple `(_, _, _)`
    }

    match (true, false) {
        box (true, false) => ()
//~^ ERROR mismatched types
//~| NOTE expected tuple `(bool, bool)`
//~| NOTE found struct `Box<_>`
    }

    match (true, false) {
        &(true, false) => ()
//~^ ERROR mismatched types
//~| NOTE expected `(bool, bool)`, found `&_`
//~| NOTE expected tuple `(bool, bool)`
//~| NOTE found reference `&_`
    }


    let v = [('a', 'b')   //~ ERROR expected function, found `(char, char)`
             ('c', 'd'),
             ('e', 'f')];

    for &(x,y) in &v {} // should be OK

    // Make sure none of the errors above were fatal
    let x: char = true; //~  ERROR mismatched types
                        //~| NOTE expected `char`, found `bool`
}
