summaryrefslogtreecommitdiffstats
path: root/src/tools/rustfmt/tests/source/issue-2977/impl.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/rustfmt/tests/source/issue-2977/impl.rs')
-rw-r--r--src/tools/rustfmt/tests/source/issue-2977/impl.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/tools/rustfmt/tests/source/issue-2977/impl.rs b/src/tools/rustfmt/tests/source/issue-2977/impl.rs
new file mode 100644
index 000000000..8d7bb9414
--- /dev/null
+++ b/src/tools/rustfmt/tests/source/issue-2977/impl.rs
@@ -0,0 +1,44 @@
+macro_rules! atomic_bits {
+ // the println macro cannot be rewritten because of the asm macro
+ ($type:ty, $ldrex:expr, $strex:expr) => {
+ impl AtomicBits for $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
+ }
+ }
+}