// Can't use unit struct as enum pattern

//@ aux-build:empty-struct.rs

extern crate empty_struct;
use empty_struct::*;

struct Empty2();

enum E {
    Empty4()
}

// remove attribute after warning cycle and promoting warnings to errors
fn main() {
    let e2 = Empty2();
    let e4 = E::Empty4();
    let xe6 = XEmpty6();
    let xe5 = XE::XEmpty5();

    match e2 {
        Empty2 => () //~ ERROR match bindings cannot shadow tuple structs
    }
    match xe6 {
        XEmpty6 => () //~ ERROR match bindings cannot shadow tuple structs
    }

    match e4 {
        E::Empty4 => ()
        //~^ ERROR expected unit struct, unit variant or constant, found tuple variant `E::Empty4`
    }
    match xe5 {
        XE::XEmpty5 => (),
        //~^ ERROR expected unit struct, unit variant or constant, found tuple variant `XE::XEmpty5`
        _ => {},
    }
}
