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