struct SafetyChecker<'tcx> {
tcx: TyCtxt<'tcx>,
emit_err: bool,
typing_env: TypingEnv<'tcx>,
resolved: Instance<'tcx>,
call_span: Span,
marker_ctx: MarkerCtx<'tcx>,
reason: &'static str,
}
Expand description
A check for the abstraction safety of a given instance.
It looks at each trait predicate on the function and how they are instantiated, then checks the methods defined on those traits and whether they may attach markers. Each time a potential marker is found a diagnostic message is emitted.
The main entrypoint is Self::check
.
Fields§
§tcx: TyCtxt<'tcx>
§emit_err: bool
Emit errors if true
, otherwise emit warnings
typing_env: TypingEnv<'tcx>
§resolved: Instance<'tcx>
Instance under scrutiny
call_span: Span
§marker_ctx: MarkerCtx<'tcx>
§reason: &'static str
Why a call we check wasn’t inlined
Implementations§
Source§impl<'tcx> SafetyChecker<'tcx>
impl<'tcx> SafetyChecker<'tcx>
Sourcefn err(&self, s: &str, span: Span)
fn err(&self, s: &str, span: Span)
Emit an error or a warning with some preformatted messaging.
Sourcefn err_markers(&self, s: &str, markers: &[Identifier], span: Span)
fn err_markers(&self, s: &str, markers: &[Identifier], span: Span)
Emit an error that mentions the markers
found
fn check_projection_predicate( &self, predicate: &ProjectionPredicate<'tcx>, span: Span, )
fn check_trait_predicate(&self, predicate: &TraitPredicate<'tcx>, span: Span)
fn check_impl(&self, impl: DefId, span: Span)
fn check_predicate(&self, clause: Clause<'tcx>, span: Span)
Auto Trait Implementations§
impl<'tcx> Freeze for SafetyChecker<'tcx>
impl<'tcx> !RefUnwindSafe for SafetyChecker<'tcx>
impl<'tcx> !Send for SafetyChecker<'tcx>
impl<'tcx> !Sync for SafetyChecker<'tcx>
impl<'tcx> Unpin for SafetyChecker<'tcx>
impl<'tcx> !UnwindSafe for SafetyChecker<'tcx>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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