-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Closed
Labels
C-bugCategory: Clippy is not doing the correct thingCategory: Clippy is not doing the correct thingI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when appliedIssue: The suggestions provided by this Lint cause an ICE/error when applied
Description
Summary
Note this silly code (which I came across in the wild!):
// self.program_id is an Option<u32>
self.program_id.map(|pid| unsafe {
libc::kill(pid as i32, libc::SIGTERM);
});
Clippy suggests (and with --fix tries to apply):
warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()`
--> src/tracer.rs:113:9
|
113 | // self.program_id.map(|pid| unsafe {
114 | || libc::kill(pid as i32, libc::SIGTERM);
115 | || });
| ||__________^- help: try: `if let Some(pid) = self.program_id { libc::kill(pid as i32, libc::SIGTERM); }`
| |__________|
|
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn
This does not compile as the unsafe
block is lost.
Reproducer
I tried this code:
fn main() {
let x = Some(1u32);
x.map(|pid| unsafe { libc::kill(pid as i32, libc::SIGHUP); });
}
I expected to see this happen:
if let Some(pid) = x { unsafe { libc::kill(pid as i32, libc::SIGHUP); } }
Instead, this happened:
if let Some(pid) = x { libc::kill(pid as i32, libc::SIGHUP); }
Version
rustc 1.89.0 (29483883e 2025-08-04)
binary: rustc
commit-hash: 29483883eed69d5fb4db01964cdf2af4d86e9cb2
commit-date: 2025-08-04
host: x86_64-unknown-linux-gnu
release: 1.89.0
LLVM version: 20.1.7
Additional Labels
@rustbot label +I-suggestion-causes-error
Metadata
Metadata
Assignees
Labels
C-bugCategory: Clippy is not doing the correct thingCategory: Clippy is not doing the correct thingI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when appliedIssue: The suggestions provided by this Lint cause an ICE/error when applied