Description
I tried this code:
#![warn(unsafe_op_in_unsafe_fn)]
pub unsafe fn f() {
let _ = std::mem::zeroed::<i16>();
unsafe {
let _ = std::mem::zeroed::<i32>();
}
}
This causes a diagnostic suggestion to rewrite it to:
#![warn(unsafe_op_in_unsafe_fn)]
pub unsafe fn f() { unsafe {
let _ = std::mem::zeroed::<i16>();
unsafe {
let _ = std::mem::zeroed::<i32>();
}
}}
However, this in turn causes more warnings which cannot be auto-fixed:
warning: unnecessary `unsafe` block
--> src/main.rs:4:5
|
2 | pub unsafe fn f() { unsafe {
| ------ because it's nested under this `unsafe` block
3 | let _ = std::mem::zeroed::<i16>();
4 | unsafe {
| ^^^^^^ unnecessary `unsafe` block
|
= note: `#[warn(unused_unsafe)]` on by default
I don't know if it would be possible to change unused_unsafe
to have a machine-applicable suggestion to remove the unsafe
keyword. Or maybe unsafe_op_in_unsafe_fn
could incorporate those suggestions. I think it probably should not remove the brackets, since that would have a semantic change, and I think would be difficult to get right (though could actually help with some of the problems of the tail-drop-order changes).
Priority-wise, this is just an annoyance since the warnings do not inhibit migration. They just need to be cleaned up manually which for a large codebase could be a lot of work.
Meta
rustc --version --verbose
:
rustc 1.84.0-nightly (59cec72a5 2024-11-08)
binary: rustc
commit-hash: 59cec72a57af178767a7b8e7f624b06cc50f1087
commit-date: 2024-11-08
host: aarch64-apple-darwin
release: 1.84.0-nightly
LLVM version: 19.1.3