//@ 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() {}