pub struct InterpErrorInfo<'tcx>(Box<InterpErrorInfoInner<'tcx>>);Expand description
Packages the kind of error we got from the const code interpreter
up with a Rust-level backtrace of where the error occurred.
These should always be constructed by calling .into() on
an InterpError. In rustc_mir::interpret, we have throw_err_*
macros for this.
Interpreter errors must not be silently discarded (that will lead to a panic). Instead,
explicitly call discard_err if this is really the right thing to do. Note that if
this happens during const-eval or in Miri, it could lead to a UB error being lost!
Tuple Fields§
§0: Box<InterpErrorInfoInner<'tcx>>Implementations§
Source§impl<'tcx> InterpErrorInfo<'tcx>
impl<'tcx> InterpErrorInfo<'tcx>
pub fn into_parts(self) -> (InterpErrorKind<'tcx>, InterpErrorBacktrace)
pub fn into_kind(self) -> InterpErrorKind<'tcx>
pub fn from_parts( kind: InterpErrorKind<'tcx>, backtrace: InterpErrorBacktrace, ) -> Self
pub fn kind(&self) -> &InterpErrorKind<'tcx>
Sourcepub fn to_string(&self) -> String
pub fn to_string(&self) -> String
Turn the given error into a human-readable string. Expects the string to be printed, so if
RUSTC_CTFE_BACKTRACE is set this will show a backtrace of the rustc internals that
triggered the error.
This is NOT the preferred way to render an error; use report from const_eval instead.
However, this is useful when error messages appear in ICEs.
Trait Implementations§
Source§impl<'tcx> Debug for InterpErrorInfo<'tcx>
impl<'tcx> Debug for InterpErrorInfo<'tcx>
Source§impl From<ErrorHandled> for InterpErrorInfo<'_>
impl From<ErrorHandled> for InterpErrorInfo<'_>
Source§fn from(err: ErrorHandled) -> Self
fn from(err: ErrorHandled) -> Self
Source§impl<'tcx> From<InterpErrorInfo<'tcx>> for ValTreeCreationError<'tcx>
impl<'tcx> From<InterpErrorInfo<'tcx>> for ValTreeCreationError<'tcx>
Source§fn from(err: InterpErrorInfo<'tcx>) -> Self
fn from(err: InterpErrorInfo<'tcx>) -> Self
Source§impl<'tcx> From<InterpErrorKind<'tcx>> for InterpErrorInfo<'tcx>
impl<'tcx> From<InterpErrorKind<'tcx>> for InterpErrorInfo<'tcx>
Source§fn from(kind: InterpErrorKind<'tcx>) -> Self
fn from(kind: InterpErrorKind<'tcx>) -> Self
Auto Trait Implementations§
impl<'tcx> !DynSend for InterpErrorInfo<'tcx>
impl<'tcx> !DynSync for InterpErrorInfo<'tcx>
impl<'tcx> !RefUnwindSafe for InterpErrorInfo<'tcx>
impl<'tcx> !Sync for InterpErrorInfo<'tcx>
impl<'tcx> !UnwindSafe for InterpErrorInfo<'tcx>
impl<'tcx> Freeze for InterpErrorInfo<'tcx>
impl<'tcx> Send for InterpErrorInfo<'tcx>
impl<'tcx> Unpin for InterpErrorInfo<'tcx>
impl<'tcx> UnsafeUnpin for InterpErrorInfo<'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
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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> ⓘ
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> ⓘ
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 moreSource§impl<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
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: 8 bytes