|  | #![allow(unused_unsafe)] | 
|  | #![allow(dead_code)] | 
|  | #![deny(unsafe_code)] | 
|  |  | 
|  | struct Bar; | 
|  | struct Bar2; | 
|  | struct Bar3; | 
|  |  | 
|  | #[allow(unsafe_code)] | 
|  | mod allowed_unsafe { | 
|  | fn allowed() { unsafe {} } | 
|  | unsafe fn also_allowed() {} | 
|  | unsafe trait AllowedUnsafe { } | 
|  | unsafe impl AllowedUnsafe for super::Bar {} | 
|  | #[no_mangle] fn allowed2() {} | 
|  | #[export_name = "foo"] fn allowed3() {} | 
|  | } | 
|  |  | 
|  | macro_rules! unsafe_in_macro { | 
|  | () => {{ | 
|  | #[no_mangle] fn foo() {} //~ ERROR: declaration of a `no_mangle` function | 
|  | #[no_mangle] static FOO: u32 = 5; //~ ERROR: declaration of a `no_mangle` static | 
|  | #[export_name = "bar"] fn bar() {} | 
|  | //~^ ERROR: declaration of a function with `export_name` | 
|  | #[export_name = "BAR"] static BAR: u32 = 5; | 
|  | //~^ ERROR: declaration of a static with `export_name` | 
|  | unsafe {} //~ ERROR: usage of an `unsafe` block | 
|  | }} | 
|  | } | 
|  |  | 
|  | #[no_mangle] fn foo() {} //~ ERROR: declaration of a `no_mangle` function | 
|  | #[no_mangle] static FOO: u32 = 5; //~ ERROR: declaration of a `no_mangle` static | 
|  |  | 
|  | trait AssocFnTrait { | 
|  | fn foo(); | 
|  | } | 
|  |  | 
|  | struct AssocFnFoo; | 
|  |  | 
|  | impl AssocFnFoo { | 
|  | #[no_mangle] fn foo() {} //~ ERROR: declaration of a `no_mangle` method | 
|  | } | 
|  |  | 
|  | impl AssocFnTrait for AssocFnFoo { | 
|  | #[no_mangle] fn foo() {} //~ ERROR: declaration of a `no_mangle` method | 
|  | } | 
|  |  | 
|  | #[export_name = "bar"] fn bar() {} //~ ERROR: declaration of a function with `export_name` | 
|  | #[export_name = "BAR"] static BAR: u32 = 5; //~ ERROR: declaration of a static with `export_name` | 
|  |  | 
|  | #[link_section = ".example_section"] fn uwu() {} //~ ERROR: declaration of a function with `link_section` | 
|  | #[link_section = ".example_section"] static UWU: u32 = 5; //~ ERROR: declaration of a static with `link_section` | 
|  |  | 
|  | struct AssocFnBar; | 
|  |  | 
|  | impl AssocFnBar { | 
|  | #[export_name = "bar"] fn bar() {} //~ ERROR: declaration of a method with `export_name` | 
|  | } | 
|  |  | 
|  | impl AssocFnTrait for AssocFnBar { | 
|  | #[export_name = "bar"] fn foo() {} //~ ERROR: declaration of a method with `export_name` | 
|  | } | 
|  |  | 
|  | unsafe fn baz() {} //~ ERROR: declaration of an `unsafe` function | 
|  | unsafe trait Foo {} //~ ERROR: declaration of an `unsafe` trait | 
|  | unsafe impl Foo for Bar {} //~ ERROR: implementation of an `unsafe` trait | 
|  |  | 
|  | trait Baz { | 
|  | unsafe fn baz(&self); //~ ERROR: declaration of an `unsafe` method | 
|  | unsafe fn provided(&self) {} //~ ERROR: implementation of an `unsafe` method | 
|  | unsafe fn provided_override(&self) {} //~ ERROR: implementation of an `unsafe` method | 
|  | } | 
|  |  | 
|  | impl Baz for Bar { | 
|  | unsafe fn baz(&self) {} //~ ERROR: implementation of an `unsafe` method | 
|  | unsafe fn provided_override(&self) {} //~ ERROR: implementation of an `unsafe` method | 
|  | } | 
|  |  | 
|  |  | 
|  | #[allow(unsafe_code)] | 
|  | trait A { | 
|  | unsafe fn allowed_unsafe(&self); | 
|  | unsafe fn allowed_unsafe_provided(&self) {} | 
|  | } | 
|  |  | 
|  | #[allow(unsafe_code)] | 
|  | impl Baz for Bar2 { | 
|  | unsafe fn baz(&self) {} | 
|  | unsafe fn provided_override(&self) {} | 
|  | } | 
|  |  | 
|  | impl Baz for Bar3 { | 
|  | #[allow(unsafe_code)] | 
|  | unsafe fn baz(&self) {} | 
|  | unsafe fn provided_override(&self) {} //~ ERROR: implementation of an `unsafe` method | 
|  | } | 
|  |  | 
|  | #[allow(unsafe_code)] | 
|  | unsafe trait B { | 
|  | fn dummy(&self) {} | 
|  | } | 
|  |  | 
|  | trait C { | 
|  | #[allow(unsafe_code)] | 
|  | unsafe fn baz(&self); | 
|  | unsafe fn provided(&self) {} //~ ERROR: implementation of an `unsafe` method | 
|  | } | 
|  |  | 
|  | impl C for Bar { | 
|  | #[allow(unsafe_code)] | 
|  | unsafe fn baz(&self) {} | 
|  | unsafe fn provided(&self) {} //~ ERROR: implementation of an `unsafe` method | 
|  | } | 
|  |  | 
|  | impl C for Bar2 { | 
|  | unsafe fn baz(&self) {} //~ ERROR: implementation of an `unsafe` method | 
|  | } | 
|  |  | 
|  | trait D { | 
|  | #[allow(unsafe_code)] | 
|  | unsafe fn unsafe_provided(&self) {} | 
|  | } | 
|  |  | 
|  | impl D for Bar {} | 
|  |  | 
|  | fn main() { | 
|  | unsafe {} //~ ERROR: usage of an `unsafe` block | 
|  |  | 
|  | unsafe_in_macro!() | 
|  | } |