rustc_mir_build::check_unsafety

Struct UnsafetyVisitor

source
struct UnsafetyVisitor<'a, 'tcx> {
    tcx: TyCtxt<'tcx>,
    thir: &'a Thir<'tcx>,
    hir_context: HirId,
    safety_context: SafetyContext,
    body_target_features: &'tcx [TargetFeature],
    assignment_info: Option<Ty<'tcx>>,
    in_union_destructure: bool,
    param_env: ParamEnv<'tcx>,
    inside_adt: bool,
    warnings: &'a mut Vec<UnusedUnsafeWarning>,
    suggest_unsafe_block: bool,
}

Fields§

§tcx: TyCtxt<'tcx>§thir: &'a Thir<'tcx>§hir_context: HirId

The HirId of the current scope, which would be the HirId of the current HIR node, modulo adjustments. Used for lint levels.

§safety_context: SafetyContext

The current “safety context”. This notably tracks whether we are in an unsafe block, and whether it has been used.

§body_target_features: &'tcx [TargetFeature]

The #[target_feature] attributes of the body. Used for checking calls to functions with #[target_feature] (RFC 2396).

§assignment_info: Option<Ty<'tcx>>

When inside the LHS of an assignment to a field, this is the type of the LHS and the span of the assignment expression.

§in_union_destructure: bool§param_env: ParamEnv<'tcx>§inside_adt: bool§warnings: &'a mut Vec<UnusedUnsafeWarning>§suggest_unsafe_block: bool

Flag to ensure that we only suggest wrapping the entire function body in an unsafe block once.

Implementations§

source§

impl<'tcx> UnsafetyVisitor<'_, 'tcx>

source

fn in_safety_context( &mut self, safety_context: SafetyContext, f: impl FnOnce(&mut Self), )

source

fn emit_deprecated_safe_fn_call(&self, span: Span, kind: &UnsafeOpKind) -> bool

source

fn requires_unsafe(&mut self, span: Span, kind: UnsafeOpKind)

source

fn warn_unused_unsafe( &mut self, hir_id: HirId, block_span: Span, enclosing_unsafe: Option<UnusedUnsafeEnclosing>, )

source

fn unsafe_op_in_unsafe_fn_allowed(&self) -> bool

Whether the unsafe_op_in_unsafe_fn lint is allowed at the current HIR node.

source

fn visit_inner_body(&mut self, def: LocalDefId)

Handle closures/coroutines/inline-consts, which is unsafecked with their parent body.

Trait Implementations§

source§

impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx>

source§

fn thir(&self) -> &'a Thir<'tcx>

source§

fn visit_block(&mut self, block: &'a Block)

source§

fn visit_pat(&mut self, pat: &'a Pat<'tcx>)

source§

fn visit_expr(&mut self, expr: &'a Expr<'tcx>)

source§

fn visit_stmt(&mut self, stmt: &'thir Stmt<'tcx>)

source§

fn visit_arm(&mut self, arm: &'thir Arm<'tcx>)

Auto Trait Implementations§

§

impl<'a, 'tcx> Freeze for UnsafetyVisitor<'a, 'tcx>

§

impl<'a, 'tcx> !RefUnwindSafe for UnsafetyVisitor<'a, 'tcx>

§

impl<'a, 'tcx> !Send for UnsafetyVisitor<'a, 'tcx>

§

impl<'a, 'tcx> !Sync for UnsafetyVisitor<'a, 'tcx>

§

impl<'a, 'tcx> Unpin for UnsafetyVisitor<'a, 'tcx>

§

impl<'a, 'tcx> !UnwindSafe for UnsafetyVisitor<'a, 'tcx>

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = _

Alignment of Self.
source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T, R> CollectAndApply<T, R> for T

source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

source§

type Output = R

source§

impl<T> Filterable for T

source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<P> IntoQueryParam<P> for P

source§

impl<T> MaybeResult<T> for T

source§

type Error = !

source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

source§

fn upcast(self, interner: I) -> U

source§

impl<I, T> UpcastFrom<I, T> for T

source§

fn upcast_from(from: T, _tcx: I) -> T

source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

source§

impl<T> ErasedDestructor for T
where T: 'static,

source§

impl<T> MaybeSendSync for T

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 120 bytes