Type Alias rustc_middle::mir::AssertMessage
source · 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(GeneratorKind),
ResumedAfterPanic(GeneratorKind),
MisalignedPointerDereference {
required: Operand<'tcx>,
found: Operand<'tcx>,
},
}
Variants§
BoundsCheck
Overflow(BinOp, Operand<'tcx>, Operand<'tcx>)
OverflowNeg(Operand<'tcx>)
DivisionByZero(Operand<'tcx>)
RemainderByZero(Operand<'tcx>)
ResumedAfterReturn(GeneratorKind)
ResumedAfterPanic(GeneratorKind)
MisalignedPointerDereference
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 description(&self) -> &'static str
pub fn description(&self) -> &'static str
Get the message that is printed at runtime when this assertion fails.
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.
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::description
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) -> DiagnosticMessage
pub fn diagnostic_message(&self) -> DiagnosticMessage
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::description
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(Cow<'static, str>, DiagnosticArgValue<'static>) )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<'tcx, O, __D: TyDecoder<I = TyCtxt<'tcx>>> Decodable<__D> for AssertKind<O>where
O: Decodable<__D>,
impl<'tcx, O, __D: TyDecoder<I = TyCtxt<'tcx>>> Decodable<__D> for AssertKind<O>where O: Decodable<__D>,
source§impl<'tcx, O, __E: TyEncoder<I = TyCtxt<'tcx>>> Encodable<__E> for AssertKind<O>where
O: Encodable<__E>,
impl<'tcx, O, __E: TyEncoder<I = TyCtxt<'tcx>>> Encodable<__E> for AssertKind<O>where O: Encodable<__E>,
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<AssertKind<O>> for AssertKind<O>
impl<O: PartialEq> PartialEq<AssertKind<O>> for AssertKind<O>
source§fn eq(&self, other: &AssertKind<O>) -> bool
fn eq(&self, other: &AssertKind<O>) -> bool
self
and other
values to be equal, and is used
by ==
.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
.source§impl<'tcx, O> TypeVisitable<TyCtxt<'tcx>> for AssertKind<O>where
O: TypeVisitable<TyCtxt<'tcx>>,
impl<'tcx, O> TypeVisitable<TyCtxt<'tcx>> for AssertKind<O>where O: TypeVisitable<TyCtxt<'tcx>>,
source§fn visit_with<__V: TypeVisitor<TyCtxt<'tcx>>>(
&self,
__visitor: &mut __V
) -> ControlFlow<__V::BreakTy>
fn visit_with<__V: TypeVisitor<TyCtxt<'tcx>>>( &self, __visitor: &mut __V ) -> ControlFlow<__V::BreakTy>
impl<O> StructuralPartialEq for AssertKind<O>
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
: 55 bytesOverflow
: 55 bytesOverflowNeg
: 31 bytesDivisionByZero
: 31 bytesRemainderByZero
: 31 bytesResumedAfterReturn
: 1 byteResumedAfterPanic
: 1 byteMisalignedPointerDereference
: 55 bytes