Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau
Add some convenience helper methods on `hir::Safety` Makes a lot of call sites simpler and should make any refactorings needed for https://github.com/rust-lang/rust/pull/134090#issuecomment-2541332415 simpler, as fewer sites have to be touched in case we end up storing some information in the variants of `hir::Safety`
This commit is contained in:
commit
d48af09ffd
28 changed files with 74 additions and 70 deletions
|
@ -4,7 +4,7 @@ use std::ops::Bound;
|
|||
|
||||
use rustc_errors::DiagArgValue;
|
||||
use rustc_hir::def::DefKind;
|
||||
use rustc_hir::{self as hir, BindingMode, ByRef, HirId, Mutability, Safety};
|
||||
use rustc_hir::{self as hir, BindingMode, ByRef, HirId, Mutability};
|
||||
use rustc_middle::middle::codegen_fn_attrs::TargetFeature;
|
||||
use rustc_middle::mir::BorrowKind;
|
||||
use rustc_middle::span_bug;
|
||||
|
@ -342,7 +342,7 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx> {
|
|||
PatKind::Leaf { subpatterns, .. } => {
|
||||
if let ty::Adt(adt_def, ..) = pat.ty.kind() {
|
||||
for pat in subpatterns {
|
||||
if adt_def.non_enum_variant().fields[pat.field].safety == Safety::Unsafe {
|
||||
if adt_def.non_enum_variant().fields[pat.field].safety.is_unsafe() {
|
||||
self.requires_unsafe(pat.pattern.span, UseOfUnsafeField);
|
||||
}
|
||||
}
|
||||
|
@ -367,7 +367,7 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx> {
|
|||
PatKind::Variant { adt_def, args: _, variant_index, subpatterns } => {
|
||||
for pat in subpatterns {
|
||||
let field = &pat.field;
|
||||
if adt_def.variant(*variant_index).fields[*field].safety == Safety::Unsafe {
|
||||
if adt_def.variant(*variant_index).fields[*field].safety.is_unsafe() {
|
||||
self.requires_unsafe(pat.pattern.span, UseOfUnsafeField);
|
||||
}
|
||||
}
|
||||
|
@ -479,7 +479,7 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx> {
|
|||
return; // don't visit the whole expression
|
||||
}
|
||||
ExprKind::Call { fun, ty: _, args: _, from_hir_call: _, fn_span: _ } => {
|
||||
if self.thir[fun].ty.fn_sig(self.tcx).safety() == hir::Safety::Unsafe {
|
||||
if self.thir[fun].ty.fn_sig(self.tcx).safety().is_unsafe() {
|
||||
let func_id = if let ty::FnDef(func_id, _) = self.thir[fun].ty.kind() {
|
||||
Some(*func_id)
|
||||
} else {
|
||||
|
@ -623,7 +623,7 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx> {
|
|||
ExprKind::Field { lhs, variant_index, name } => {
|
||||
let lhs = &self.thir[lhs];
|
||||
if let ty::Adt(adt_def, _) = lhs.ty.kind() {
|
||||
if adt_def.variant(variant_index).fields[name].safety == Safety::Unsafe {
|
||||
if adt_def.variant(variant_index).fields[name].safety.is_unsafe() {
|
||||
self.requires_unsafe(expr.span, UseOfUnsafeField);
|
||||
} else if adt_def.is_union() {
|
||||
if let Some(assigned_ty) = self.assignment_info {
|
||||
|
@ -1112,11 +1112,7 @@ pub(crate) fn check_unsafety(tcx: TyCtxt<'_>, def: LocalDefId) {
|
|||
|
||||
let hir_id = tcx.local_def_id_to_hir_id(def);
|
||||
let safety_context = tcx.hir().fn_sig_by_hir_id(hir_id).map_or(SafetyContext::Safe, |fn_sig| {
|
||||
if fn_sig.header.safety == hir::Safety::Unsafe {
|
||||
SafetyContext::UnsafeFn
|
||||
} else {
|
||||
SafetyContext::Safe
|
||||
}
|
||||
if fn_sig.header.safety.is_unsafe() { SafetyContext::UnsafeFn } else { SafetyContext::Safe }
|
||||
});
|
||||
let body_target_features = &tcx.body_codegen_attrs(def.to_def_id()).target_features;
|
||||
let mut warnings = Vec::new();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue