| // Checks that #[naked] attribute can be placed on function definitions only. |
| // |
| //@ needs-asm-support |
| #![feature(naked_functions)] |
| #![naked] //~ ERROR should be applied to a function definition |
| |
| use std::arch::naked_asm; |
| |
| extern "C" { |
| #[naked] //~ ERROR should be applied to a function definition |
| fn f(); |
| } |
| |
| #[naked] //~ ERROR should be applied to a function definition |
| #[repr(C)] |
| struct S { |
| a: u32, |
| b: u32, |
| } |
| |
| trait Invoke { |
| #[naked] //~ ERROR should be applied to a function definition |
| extern "C" fn invoke(&self); |
| } |
| |
| impl Invoke for S { |
| #[naked] |
| extern "C" fn invoke(&self) { |
| unsafe { naked_asm!("") } |
| } |
| } |
| |
| #[naked] |
| extern "C" fn ok() { |
| unsafe { naked_asm!("") } |
| } |
| |
| impl S { |
| #[naked] |
| extern "C" fn g() { |
| unsafe { naked_asm!("") } |
| } |
| |
| #[naked] |
| extern "C" fn h(&self) { |
| unsafe { naked_asm!("") } |
| } |
| } |
| |
| fn main() { |
| #[naked] //~ ERROR should be applied to a function definition |
| || {}; |
| } |