//@ run-pass
#![allow(unused_variables)]
#![allow(non_upper_case_globals)]

// Empty struct defined with braces add names into type namespace
// Empty struct defined without braces add names into both type and value namespaces

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

extern crate empty_struct;
use empty_struct::*;

struct Empty1 {}
struct Empty2;
struct Empty7();

#[derive(PartialEq, Eq)]
struct Empty3 {}

const Empty3: Empty3 = Empty3 {};

enum E {
    Empty4 {},
    Empty5,
    Empty6(),
}

fn local() {
    let e1: Empty1 = Empty1 {};
    let e2: Empty2 = Empty2 {};
    let e2: Empty2 = Empty2;
    let e3: Empty3 = Empty3 {};
    let e3: Empty3 = Empty3;
    let e4: E = E::Empty4 {};
    let e5: E = E::Empty5 {};
    let e5: E = E::Empty5;
    let e6: E = E::Empty6 {};
    let e6: E = E::Empty6();
    let ctor6: fn() -> E = E::Empty6;
    let e7: Empty7 = Empty7 {};
    let e7: Empty7 = Empty7();
    let ctor7: fn() -> Empty7 = Empty7;

    match e1 {
        Empty1 {} => {}
    }
    match e2 {
        Empty2 {} => {}
    }
    match e3 {
        Empty3 {} => {}
    }
    match e4 {
        E::Empty4 {} => {}
        _ => {}
    }
    match e5 {
        E::Empty5 {} => {}
        _ => {}
    }
    match e6 {
        E::Empty6 {} => {}
        _ => {}
    }
    match e7 {
        Empty7 {} => {}
    }

    match e1 {
        Empty1 { .. } => {}
    }
    match e2 {
        Empty2 { .. } => {}
    }
    match e3 {
        Empty3 { .. } => {}
    }
    match e4 {
        E::Empty4 { .. } => {}
        _ => {}
    }
    match e5 {
        E::Empty5 { .. } => {}
        _ => {}
    }
    match e6 {
        E::Empty6 { .. } => {}
        _ => {}
    }
    match e7 {
        Empty7 { .. } => {}
    }

    match e2 {
        Empty2 => {}
    }
    match e3 {
        Empty3 => {}
    }
    match e5 {
        E::Empty5 => {}
        _ => {}
    }
    match e6 {
        E::Empty6() => {}
        _ => {}
    }
    match e6 {
        E::Empty6(..) => {}
        _ => {}
    }
    match e7 {
        Empty7() => {}
    }
    match e7 {
        Empty7(..) => {}
    }

    let e11: Empty1 = Empty1 { ..e1 };
    let e22: Empty2 = Empty2 { ..e2 };
    let e33: Empty3 = Empty3 { ..e3 };
    let e77: Empty7 = Empty7 { ..e7 };
}

fn xcrate() {
    let e1: XEmpty1 = XEmpty1 {};
    let e2: XEmpty2 = XEmpty2 {};
    let e2: XEmpty2 = XEmpty2;
    let e3: XE = XE::XEmpty3 {};
    let e4: XE = XE::XEmpty4 {};
    let e4: XE = XE::XEmpty4;
    let e6: XE = XE::XEmpty6 {};
    let e6: XE = XE::XEmpty6();
    let ctor6: fn() -> XE = XE::XEmpty6;
    let e7: XEmpty7 = XEmpty7 {};
    let e7: XEmpty7 = XEmpty7();
    let ctor7: fn() -> XEmpty7 = XEmpty7;

    match e1 {
        XEmpty1 {} => {}
    }
    match e2 {
        XEmpty2 {} => {}
    }
    match e3 {
        XE::XEmpty3 {} => {}
        _ => {}
    }
    match e4 {
        XE::XEmpty4 {} => {}
        _ => {}
    }
    match e6 {
        XE::XEmpty6 {} => {}
        _ => {}
    }
    match e7 {
        XEmpty7 {} => {}
    }

    match e1 {
        XEmpty1 { .. } => {}
    }
    match e2 {
        XEmpty2 { .. } => {}
    }
    match e3 {
        XE::XEmpty3 { .. } => {}
        _ => {}
    }
    match e4 {
        XE::XEmpty4 { .. } => {}
        _ => {}
    }
    match e6 {
        XE::XEmpty6 { .. } => {}
        _ => {}
    }
    match e7 {
        XEmpty7 { .. } => {}
    }

    match e2 {
        XEmpty2 => {}
    }
    match e4 {
        XE::XEmpty4 => {}
        _ => {}
    }
    match e6 {
        XE::XEmpty6() => {}
        _ => {}
    }
    match e6 {
        XE::XEmpty6(..) => {}
        _ => {}
    }
    match e7 {
        XEmpty7() => {}
    }
    match e7 {
        XEmpty7(..) => {}
    }

    let e11: XEmpty1 = XEmpty1 { ..e1 };
    let e22: XEmpty2 = XEmpty2 { ..e2 };
    let e77: XEmpty7 = XEmpty7 { ..e7 };
}

fn main() {
    local();
    xcrate();
}
