//@ run-rustfix #![deny(unsafe_attr_outside_unsafe)] macro_rules! tt { ($e:tt) => { #$e extern fn foo() {} } } macro_rules! ident { ($e:ident) => { #[$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) => { #[$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!([no_mangle]); //~^ ERROR: unsafe attribute used without unsafe //~| WARN this is accepted in the current edition ident!(no_mangle); meta!(no_mangle); //~^ ERROR: unsafe attribute used without unsafe //~| WARN this is accepted in the current edition meta2!(export_name = "baw"); //~^ ERROR: unsafe attribute used without unsafe //~| WARN this is accepted in the current edition ident2!(export_name, "bars"); #[no_mangle] //~^ ERROR: unsafe attribute used without unsafe //~| WARN this is accepted in the current edition extern "C" fn one() {} fn main() {}