rust/tests/source/issue-2977/trait.rs

45 lines
1.1 KiB
Rust
Raw Normal View History

macro_rules! atomic_bits {
// the println macro cannot be rewritten because of the asm macro
($type:ty, $ldrex:expr, $strex:expr) => {
trait $type {
unsafe fn load_excl(address: usize) -> Self {
let raw: $type;
asm!($ldrex
: "=r"(raw)
: "r"(address)
:
: "volatile");
raw
}
unsafe fn store_excl(self, address: usize) -> bool {
let status: $type;
println!("{}",
status);
status == 0
}
}
};
// the println macro should be rewritten here
($type:ty) => {
fn some_func(self) {
let status: $type;
println!("{}", status);
}
};
// unrewritale macro in func
($type:ty, $ldrex:expr) => {
unsafe fn load_excl(address: usize) -> Self {
let raw: $type;
asm!($ldrex
: "=r"(raw)
: "r"(address)
:
: "volatile");
raw
}
}
}