Clippy lints / Suspicious
Clippy lint · Suspicious · checked with Clippy 0.1.99
clippy::pointers_in_nomem_asm_block: passing pointers to nomem asm block
What it meansChecks if any pointer is being passed to an asm! block with nomem option. It is in the suspicious group and warns by default.
What you see
warning: passing pointers to nomem asm block --> main.rs:4:48 | 4 | unsafe { core::arch::asm!("mov [{p}], 42", p = in(reg) p, options(nomem, nostack)); } | ^^^^^^^^^^^^^ | = note: `nomem` means that no memory write or read happens inside the asm! block = note: if this is intentional and no pointers are read or written to, consider allowing the lint = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#pointers_in_nomem_asm_block = note: `#[warn(clippy::pointers_in_nomem_asm_block)]` on by default
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
nomem forbids any reads or writes to memory and passing a pointer suggests that either of those will happen.
Code that is most likely wrong or useless. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
fn f(p: *mut u32) {
unsafe { core::arch::asm!("mov [{p}], 42", p = in(reg) p, options(nomem, nostack)); }
}
Write this instead
fn f(p: *mut u32) {
unsafe { core::arch::asm!("mov [{p}], 42", p = in(reg) p, options(nostack)); }
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::pointers_in_nomem_asm_block)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
pointers_in_nomem_asm_block = "allow"One run
cargo clippy -- -A clippy::pointers-in-nomem-asm-blockThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Checks if any pointer is being passed to an asm! block with nomem option.
Why is this bad?
nomem forbids any reads or writes to memory and passing a pointer suggests
that either of those will happen.
Example
fn f(p: *mut u32) {
unsafe { core::arch::asm!("mov [{p}], 42", p = in(reg) p, options(nomem, nostack)); }
}
Use instead:
fn f(p: *mut u32) {
unsafe { core::arch::asm!("mov [{p}], 42", p = in(reg) p, options(nostack)); }
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- octal_escapesoctal-looking escape in a literal
- path_ends_with_extLooks for calls to Path::ends_with calls where the argument looks like a file extension. By default, Clippy has a short list of known filenames that start with a dot but aren’t necessarily file extensions (e.g
- permissions_set_readonly_falsecall to `set_readonly` with argument `false`
- possible_missing_elsethis looks like an `else {..}` but the `else` is missing
- print_in_format_impluse of `println!` in `Display` impl
- rc_clone_in_vec_initinitializing a reference-counted pointer in `vec![elem; len]`
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::octal_escapesoctal-looking escape in a literalRead it next →Did this answer your question?