rust-lang / rust-lang/rust-clippy
Edge case in `clippy::multiple_unsafe_ops_per_block`
Open
Nobody has claimed this yet.
C-bug
I-false-positive
- Dominant language
- Rust
- Stars
- 13.5k
- Forks
- 2.2k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 32
Description
Summary
The following example identified by @Jarcho in the discussion of #16079 triggers the lint while it probably shouldn't:
#![warn(clippy::multiple_unsafe_ops_per_block)]
union U {
i: u32,
}
#[clippy::msrv = "1.91"]
fn main() {
let u = U { i: 0 };
let pu = &raw const u;
// The lint should probably not trigger here as we can't break apart the expression
unsafe {
_ = (*pu).i;
}
}
Reproducer
No response
Version
Rust nightly-2025-10-31
Additional Labels
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the supplied Rust nightly reproducer and inspect the implementation and tests for the clippy::multiple_unsafe_ops_per_block lint. Determine why the union field access is counted as multiple unsafe operations. Done means this example no longer triggers the lint while existing lint behavior remains covered by tests.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100