//@ run-rustfix
#![deny(unsafe_attr_outside_unsafe)]

macro_rules! tt {
    ($e:tt) => {
        #$e
        extern fn foo() {}
    }
}

macro_rules! ident {
    ($e:ident) => {
        #[unsafe($e)]
        //~^ ERROR: unsafe attribute used without unsafe
        //~| WARN this is accepted in the current edition
        extern fn bar() {}
    }
}

macro_rules! ident2 {
    ($e:ident, $l:literal) => {
        #[unsafe($e = $l)]
        //~^ ERROR: unsafe attribute used without unsafe
        //~| WARN this is accepted in the current edition
        extern fn bars() {}
    }
}

macro_rules! meta {
    ($m:meta) => {
        #[$m]
        extern fn baz() {}
    }
}

macro_rules! meta2 {
    ($m:meta) => {
        #[$m]
        extern fn baw() {}
    }
}

tt!([unsafe(no_mangle)]);
//~^ ERROR: unsafe attribute used without unsafe
//~| WARN this is accepted in the current edition
ident!(no_mangle);
meta!(unsafe(no_mangle));
//~^ ERROR: unsafe attribute used without unsafe
//~| WARN this is accepted in the current edition
meta2!(unsafe(export_name = "baw"));
//~^ ERROR: unsafe attribute used without unsafe
//~| WARN this is accepted in the current edition
ident2!(export_name, "bars");

#[unsafe(no_mangle)]
//~^ ERROR: unsafe attribute used without unsafe
//~| WARN this is accepted in the current edition
extern "C" fn one() {}

fn main() {}
