Clippy lints / Complexity
Clippy lint · Complexity · checked with Clippy 0.1.99
clippy::transmute_ptr_to_ref: Checks for transmutes from a pointer to a reference
What it meansChecks for transmutes from a pointer to a reference. It is in the complexity group and warns by default.
Does it matter?
This can always be rewritten with & and *.
Code that does something simple in a complicated way. Warns by default.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
unsafe {
let _: &T = std::mem::transmute(p); // where p: *const T
}
// can be written:
let _: &T = &*p;
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::transmute_ptr_to_ref)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
transmute_ptr_to_ref = "allow"One run
cargo clippy -- -A clippy::transmute-ptr-to-refThe [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.
Settings in clippy.toml
msrv: The minimum rust version that the project supports. Defaults to the rust-version field in Cargo.toml
Clippy's own documentation
What it does
Checks for transmutes from a pointer to a reference.
Why is this bad?
This can always be rewritten with & and *.
Known problems
mem::transmutein statics and constants is stable from Rust 1.46.0, while dereferencing raw pointer is not stable yet. If you need to do this in those places, you would have to usetransmuteinstead.
Example
unsafe {
let _: &T = std::mem::transmute(p); // where p: *const T
}
// can be written:
let _: &T = &*p;
Configuration
-
msrv: The minimum rust version that the project supports. Defaults to therust-versionfield inCargo.toml(default:
current version)
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- too_many_argumentsChecks for functions with too many parameters
- clone_on_copyusing `clone` on type `u64` which implements the `Copy` trait
- type_complexityChecks for types used in structs, parameters and let declarations above a certain complexity threshold
- transmute_bytes_to_strtransmute from a `&[u8]` to a `&str`
- transmute_int_to_booltransmute from a `u8` to a `bool`
- transmute_int_to_non_zeroChecks for transmutes from T to NonZero<T>, and suggests the new_unchecked method instead
- transmutes_expressible_as_ptr_castsChecks for transmutes that could be a pointer cast
- unit_argChecks for passing a unit value as an argument to a function without using a unit literal (())
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::too_many_argumentsChecks for functions with too many parametersRead it next →Did this answer your question?