// 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!("") }