Closed
Description
rust-analyzer version: rust-analyzer 1.87.0 (17067e9ac6d 2025-05-09)
and rust-analyzer 1.89.0-nightly (4d051fb3 2025-05-18)
rustc version: rustc 1.87.0 (17067e9ac 2025-05-09)
and rustc 1.89.0-nightly (4d051fb30 2025-05-18)
editor or extension: Neovim 0.11.0 + Mason + nvim-lspconfig
code snippet to reproduce:
pub trait FooTrait {
unsafe fn method1();
unsafe fn method2();
}
unsafe fn some_unsafe_fn() {}
macro_rules! impl_foo {
() => {
unsafe fn method1() {
some_unsafe_fn();
}
unsafe fn method2() {
some_unsafe_fn();
}
};
}
pub struct S1;
// Works fine: no diagnostics.
#[allow(unsafe_op_in_unsafe_fn)]
impl FooTrait for S1 {
unsafe fn method1() {
some_unsafe_fn();
}
unsafe fn method2() {
some_unsafe_fn();
}
}
pub struct S2;
// Expectation: identical to S1 (no diagnostics)
// Actual: rust-analyzer shows an `unsafe_op_in_unsafe_fn` warning on the macro expansion.
#[allow(unsafe_op_in_unsafe_fn)]
impl FooTrait for S2 {
// [WARN] call to unsafe function is unsafe and requires an unsafe function or block [unsafe_op_in_unsafe_fn]
impl_foo!();
}
Run cargo check
on the same code: no warnings are emitted.