| //@ needs-asm-support | |
| #![warn(clippy::pointers_in_nomem_asm_block)] | |
| #![crate_type = "lib"] | |
| #![no_std] | |
| use core::arch::asm; | |
| unsafe fn nomem_bad(p: &i32) { | |
| unsafe { | |
| asm!( | |
| "asdf {p1}, {p2}, {p3}", | |
| p1 = in(reg) p, | |
| //~^ pointers_in_nomem_asm_block | |
| p2 = in(reg) p as *const _ as usize, | |
| p3 = in(reg) p, | |
| options(nomem, nostack, preserves_flags) | |
| ); | |
| } | |
| } | |
| unsafe fn nomem_good(p: &i32) { | |
| unsafe { | |
| asm!("asdf {p}", p = in(reg) p, options(readonly, nostack, preserves_flags)); | |
| let p = p as *const i32 as usize; | |
| asm!("asdf {p}", p = in(reg) p, options(nomem, nostack, preserves_flags)); | |
| } | |
| } | |
| unsafe fn nomem_bad2(p: &mut i32) { | |
| unsafe { | |
| asm!("asdf {p}", p = in(reg) p, options(nomem, nostack, preserves_flags)); | |
| //~^ pointers_in_nomem_asm_block | |
| } | |
| } | |
| unsafe fn nomem_fn(p: extern "C" fn()) { | |
| unsafe { | |
| asm!("call {p}", p = in(reg) p, options(nomem)); | |
| //~^ pointers_in_nomem_asm_block | |
| } | |
| } |