fn main() {}

macro_rules! expand_to_enum {
    () => {
        enum BadE {}
        //~^ ERROR enum is not supported in `trait`s or `impl`s
        //~| ERROR enum is not supported in `trait`s or `impl`s
        //~| ERROR enum is not supported in `extern` blocks
    };
}

macro_rules! mac_impl {
    ($($i:item)*) => {
        struct S;
        impl S { $($i)* }
    }
}

mac_impl! {
    struct BadS; //~ ERROR struct is not supported in `trait`s or `impl`s
    expand_to_enum!();
}

macro_rules! mac_trait {
    ($($i:item)*) => {
        trait T { $($i)* }
    }
}

mac_trait! {
    struct BadS; //~ ERROR struct is not supported in `trait`s or `impl`s
    expand_to_enum!();
}

macro_rules! mac_extern {
    ($($i:item)*) => {
        extern "C" { $($i)* }
    }
}

mac_extern! {
    struct BadS; //~ ERROR struct is not supported in `extern` blocks
    expand_to_enum!();
}