| // Checks that the #[unsafe(naked)] attribute can be placed on function definitions only. | 
 | // | 
 | //@ needs-asm-support | 
 | #![unsafe(naked)] //~ ERROR attribute cannot be used on | 
 |  | 
 | use std::arch::naked_asm; | 
 |  | 
 | extern "C" { | 
 |     #[unsafe(naked)] //~ ERROR attribute cannot be used on | 
 |     fn f(); | 
 | } | 
 |  | 
 | #[unsafe(naked)] //~ ERROR attribute cannot be used on | 
 | #[repr(C)] | 
 | struct S { | 
 |     #[unsafe(naked)] //~ ERROR attribute cannot be used on | 
 |     a: u32, | 
 |     b: u32, | 
 | } | 
 |  | 
 | trait Invoke { | 
 |     #[unsafe(naked)] //~ ERROR attribute cannot be used on | 
 |     extern "C" fn invoke(&self); | 
 | } | 
 |  | 
 | impl Invoke for S { | 
 |     #[unsafe(naked)] | 
 |     extern "C" fn invoke(&self) { | 
 |         naked_asm!("") | 
 |     } | 
 | } | 
 |  | 
 | #[unsafe(naked)] | 
 | extern "C" fn ok() { | 
 |     naked_asm!("") | 
 | } | 
 |  | 
 | impl S { | 
 |     #[unsafe(naked)] | 
 |     extern "C" fn g() { | 
 |         naked_asm!("") | 
 |     } | 
 |  | 
 |     #[unsafe(naked)] | 
 |     extern "C" fn h(&self) { | 
 |         naked_asm!("") | 
 |     } | 
 | } | 
 |  | 
 | fn main() { | 
 |     #[unsafe(naked)] //~ ERROR attribute cannot be used on | 
 |     || {}; | 
 | } | 
 |  | 
 | // Check that the path of an attribute without a name is printed correctly (issue #140082) | 
 | #[::a] | 
 | //~^ ERROR attribute incompatible with `#[unsafe(naked)]` | 
 | //~| ERROR failed to resolve: use of unresolved module or unlinked crate `a` | 
 | #[unsafe(naked)] | 
 | extern "C" fn issue_140082() { | 
 |     naked_asm!("") | 
 | } |