Auto merge of #93678 - steffahn:better_unsafe_diagnostics, r=nagisa
Improve `unused_unsafe` lint I’m going to add some motivation and explanation below, particularly pointing the changes in behavior from this PR. _Edit:_ Looking for existing issues, looks like this PR fixes #88260. _Edit2:_ Now also contains code that closes #90776.
This commit is contained in:
commit
45e2c2881d
11 changed files with 3210 additions and 245 deletions
|
@ -3,8 +3,6 @@ use crate::build::ForGuard::OutsideGuard;
|
|||
use crate::build::{BlockAnd, BlockAndExtension, BlockFrame, Builder};
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_middle::thir::*;
|
||||
use rustc_session::lint::builtin::UNSAFE_OP_IN_UNSAFE_FN;
|
||||
use rustc_session::lint::Level;
|
||||
use rustc_span::Span;
|
||||
|
||||
impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
|
@ -209,28 +207,18 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
|||
block.unit()
|
||||
}
|
||||
|
||||
/// If we are changing the safety mode, create a new source scope
|
||||
/// If we are entering an unsafe block, create a new source scope
|
||||
fn update_source_scope_for_safety_mode(&mut self, span: Span, safety_mode: BlockSafety) {
|
||||
debug!("update_source_scope_for({:?}, {:?})", span, safety_mode);
|
||||
let new_unsafety = match safety_mode {
|
||||
BlockSafety::Safe => None,
|
||||
BlockSafety::BuiltinUnsafe => Some(Safety::BuiltinUnsafe),
|
||||
BlockSafety::Safe => return,
|
||||
BlockSafety::BuiltinUnsafe => Safety::BuiltinUnsafe,
|
||||
BlockSafety::ExplicitUnsafe(hir_id) => {
|
||||
match self.in_scope_unsafe {
|
||||
Safety::Safe => {}
|
||||
// no longer treat `unsafe fn`s as `unsafe` contexts (see RFC #2585)
|
||||
Safety::FnUnsafe
|
||||
if self.tcx.lint_level_at_node(UNSAFE_OP_IN_UNSAFE_FN, hir_id).0
|
||||
!= Level::Allow => {}
|
||||
_ => return,
|
||||
}
|
||||
self.in_scope_unsafe = Safety::ExplicitUnsafe(hir_id);
|
||||
Some(Safety::ExplicitUnsafe(hir_id))
|
||||
Safety::ExplicitUnsafe(hir_id)
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(unsafety) = new_unsafety {
|
||||
self.source_scope = self.new_source_scope(span, LintLevel::Inherited, Some(unsafety));
|
||||
}
|
||||
self.source_scope = self.new_source_scope(span, LintLevel::Inherited, Some(new_unsafety));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue