| //@ revisions: x86_64 aarch64 |
| //@ needs-asm-support |
| //@[x86_64] only-x86_64 |
| //@[aarch64] only-aarch64 |
| #![deny(unused)] |
| #![feature(naked_functions)] |
| #![crate_type = "lib"] |
| |
| pub trait Trait { |
| extern "C" fn trait_associated(a: usize, b: usize) -> usize; |
| extern "C" fn trait_method(&self, a: usize, b: usize) -> usize; |
| } |
| |
| pub mod normal { |
| use std::arch::asm; |
| |
| pub extern "C" fn function(a: usize, b: usize) -> usize { |
| //~^ ERROR unused variable: `a` |
| //~| ERROR unused variable: `b` |
| unsafe { |
| asm!("", options(noreturn)); |
| } |
| } |
| |
| pub struct Normal; |
| |
| impl Normal { |
| pub extern "C" fn associated(a: usize, b: usize) -> usize { |
| //~^ ERROR unused variable: `a` |
| //~| ERROR unused variable: `b` |
| unsafe { |
| asm!("", options(noreturn)); |
| } |
| } |
| |
| pub extern "C" fn method(&self, a: usize, b: usize) -> usize { |
| //~^ ERROR unused variable: `a` |
| //~| ERROR unused variable: `b` |
| unsafe { |
| asm!("", options(noreturn)); |
| } |
| } |
| } |
| |
| impl super::Trait for Normal { |
| extern "C" fn trait_associated(a: usize, b: usize) -> usize { |
| //~^ ERROR unused variable: `a` |
| //~| ERROR unused variable: `b` |
| unsafe { |
| asm!("", options(noreturn)); |
| } |
| } |
| |
| extern "C" fn trait_method(&self, a: usize, b: usize) -> usize { |
| //~^ ERROR unused variable: `a` |
| //~| ERROR unused variable: `b` |
| unsafe { |
| asm!("", options(noreturn)); |
| } |
| } |
| } |
| } |
| |
| pub mod naked { |
| use std::arch::naked_asm; |
| |
| #[naked] |
| pub extern "C" fn function(a: usize, b: usize) -> usize { |
| unsafe { |
| naked_asm!(""); |
| } |
| } |
| |
| pub struct Naked; |
| |
| impl Naked { |
| #[naked] |
| pub extern "C" fn associated(a: usize, b: usize) -> usize { |
| unsafe { |
| naked_asm!(""); |
| } |
| } |
| |
| #[naked] |
| pub extern "C" fn method(&self, a: usize, b: usize) -> usize { |
| unsafe { |
| naked_asm!(""); |
| } |
| } |
| } |
| |
| impl super::Trait for Naked { |
| #[naked] |
| extern "C" fn trait_associated(a: usize, b: usize) -> usize { |
| unsafe { |
| naked_asm!(""); |
| } |
| } |
| |
| #[naked] |
| extern "C" fn trait_method(&self, a: usize, b: usize) -> usize { |
| unsafe { |
| naked_asm!(""); |
| } |
| } |
| } |
| } |