Skip to content

Commit 15d5dac

Browse files
committed
Avoid suggesting to add unsafe when the extern block is already unsafe
1 parent a62cbda commit 15d5dac

File tree

3 files changed

+13
-13
lines changed

3 files changed

+13
-13
lines changed

compiler/rustc_ast_passes/src/ast_validation.rs

+12-7
Original file line numberDiff line numberDiff line change
@@ -459,13 +459,18 @@ impl<'a> AstValidator<'a> {
459459
fn check_item_safety(&self, span: Span, safety: Safety) {
460460
match self.extern_mod_safety {
461461
Some(extern_safety) => {
462-
if matches!(safety, Safety::Unsafe(_) | Safety::Safe(_))
463-
&& (extern_safety == Safety::Default || !self.features.unsafe_extern_blocks)
464-
{
465-
self.dcx().emit_err(errors::InvalidSafetyOnExtern {
466-
item_span: span,
467-
block: self.current_extern_span().shrink_to_lo(),
468-
});
462+
if matches!(safety, Safety::Unsafe(_) | Safety::Safe(_)) {
463+
if extern_safety == Safety::Default {
464+
self.dcx().emit_err(errors::InvalidSafetyOnExtern {
465+
item_span: span,
466+
block: Some(self.current_extern_span().shrink_to_lo()),
467+
});
468+
} else if !self.features.unsafe_extern_blocks {
469+
self.dcx().emit_err(errors::InvalidSafetyOnExtern {
470+
item_span: span,
471+
block: None,
472+
});
473+
}
469474
}
470475
}
471476
None => {

compiler/rustc_ast_passes/src/errors.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ pub struct InvalidSafetyOnExtern {
222222
#[primary_span]
223223
pub item_span: Span,
224224
#[suggestion(code = "unsafe ", applicability = "machine-applicable", style = "verbose")]
225-
pub block: Span,
225+
pub block: Option<Span>,
226226
}
227227

228228
#[derive(Diagnostic)]

tests/ui/parser/unsafe-foreign-mod-2.stderr

-5
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,6 @@ error: items in unadorned `extern` blocks cannot have safety qualifiers
1919
|
2020
LL | unsafe fn foo();
2121
| ^^^^^^^^^^^^^^^^
22-
|
23-
help: add unsafe to this `extern` block
24-
|
25-
LL | unsafe extern "C" unsafe {
26-
| ++++++
2722

2823
error: aborting due to 3 previous errors
2924

0 commit comments

Comments
 (0)