pub type AssertMessage<'tcx> = AssertKind<Operand<'tcx>>;
Expand description
Type for MIR Assert
terminator error messages.
Aliased Type§
enum AssertMessage<'tcx> {
BoundsCheck {
len: Operand<'tcx>,
index: Operand<'tcx>,
},
Overflow(BinOp, Operand<'tcx>, Operand<'tcx>),
OverflowNeg(Operand<'tcx>),
DivisionByZero(Operand<'tcx>),
RemainderByZero(Operand<'tcx>),
ResumedAfterReturn(CoroutineKind),
ResumedAfterPanic(CoroutineKind),
MisalignedPointerDereference {
required: Operand<'tcx>,
found: Operand<'tcx>,
},
NullPointerDereference,
}
Variants§
BoundsCheck
Overflow(BinOp, Operand<'tcx>, Operand<'tcx>)
OverflowNeg(Operand<'tcx>)
DivisionByZero(Operand<'tcx>)
RemainderByZero(Operand<'tcx>)
ResumedAfterReturn(CoroutineKind)
ResumedAfterPanic(CoroutineKind)
MisalignedPointerDereference
NullPointerDereference
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: 56 bytes
Size for each variant:
BoundsCheck
: 56 bytesOverflow
: 56 bytesOverflowNeg
: 32 bytesDivisionByZero
: 32 bytesRemainderByZero
: 32 bytesResumedAfterReturn
: 10 bytesResumedAfterPanic
: 10 bytesMisalignedPointerDereference
: 56 bytesNullPointerDereference
: 0 bytes
Implementations
Source§impl<O> AssertKind<O>
impl<O> AssertKind<O>
Sourcepub fn is_optional_overflow_check(&self) -> bool
pub fn is_optional_overflow_check(&self) -> bool
Returns true if this an overflow checking assertion controlled by -C overflow-checks.
Sourcepub fn panic_function(&self) -> LangItem
pub fn panic_function(&self) -> LangItem
Get the lang item that is invoked to print a static message when this assert fires.
The caller is expected to handle BoundsCheck
and MisalignedPointerDereference
by
invoking the appropriate lang item (panic_bounds_check/panic_misaligned_pointer_dereference)
instead of printing a static message. Those have dynamic arguments that aren’t present for
the rest of the messages here.
Sourcepub fn fmt_assert_args<W: Write>(&self, f: &mut W) -> Resultwhere
O: Debug,
pub fn fmt_assert_args<W: Write>(&self, f: &mut W) -> Resultwhere
O: Debug,
Format the message arguments for the assert(cond, msg..)
terminator in MIR printing.
Needs to be kept in sync with the run-time behavior (which is defined by
AssertKind::panic_function
and the lang items mentioned in its docs).
Note that we deliberately show more details here than we do at runtime, such as the actual
numbers that overflowed – it is much easier to do so here than at runtime.
Sourcepub fn diagnostic_message(&self) -> DiagMessage
pub fn diagnostic_message(&self) -> DiagMessage
Format the diagnostic message for use in a lint (e.g. when the assertion fails during const-eval).
Needs to be kept in sync with the run-time behavior (which is defined by
AssertKind::panic_function
and the lang items mentioned in its docs).
Note that we deliberately show more details here than we do at runtime, such as the actual
numbers that overflowed – it is much easier to do so here than at runtime.
pub fn add_args(self, adder: &mut dyn FnMut(DiagArgName, DiagArgValue))where
O: Debug,
Trait Implementations
Source§impl<O: Clone> Clone for AssertKind<O>
impl<O: Clone> Clone for AssertKind<O>
Source§fn clone(&self) -> AssertKind<O>
fn clone(&self) -> AssertKind<O>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<O: Debug> Debug for AssertKind<O>
impl<O: Debug> Debug for AssertKind<O>
Source§impl<O: Hash> Hash for AssertKind<O>
impl<O: Hash> Hash for AssertKind<O>
Source§impl<'__ctx, O> HashStable<StableHashingContext<'__ctx>> for AssertKind<O>where
O: HashStable<StableHashingContext<'__ctx>>,
impl<'__ctx, O> HashStable<StableHashingContext<'__ctx>> for AssertKind<O>where
O: HashStable<StableHashingContext<'__ctx>>,
fn hash_stable( &self, __hcx: &mut StableHashingContext<'__ctx>, __hasher: &mut StableHasher, )
Source§impl<O: PartialEq> PartialEq for AssertKind<O>
impl<O: PartialEq> PartialEq for AssertKind<O>
Source§impl<'tcx, O> TypeFoldable<TyCtxt<'tcx>> for AssertKind<O>where
O: TypeFoldable<TyCtxt<'tcx>>,
impl<'tcx, O> TypeFoldable<TyCtxt<'tcx>> for AssertKind<O>where
O: TypeFoldable<TyCtxt<'tcx>>,
Source§fn try_fold_with<__F: FallibleTypeFolder<TyCtxt<'tcx>>>(
self,
__folder: &mut __F,
) -> Result<Self, __F::Error>
fn try_fold_with<__F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, __folder: &mut __F, ) -> Result<Self, __F::Error>
Source§fn fold_with<F>(self, folder: &mut F) -> Selfwhere
F: TypeFolder<I>,
fn fold_with<F>(self, folder: &mut F) -> Selfwhere
F: TypeFolder<I>,
try_fold_with
for use with infallible
folders. Do not override this method, to ensure coherence with
try_fold_with
.