[][src]Enum rustc_middle::mir::StatementKind

pub enum StatementKind<'tcx> {
    Assign(Box<(Place<'tcx>, Rvalue<'tcx>)>),
    SetDiscriminant {
        place: Box<Place<'tcx>>,
        variant_index: VariantIdx,
    AscribeUserType(Box<(Place<'tcx>, UserTypeProjection)>, Variance),


Assign(Box<(Place<'tcx>, Rvalue<'tcx>)>)

Write the RHS Rvalue to the LHS Place.


This represents all the reading that a pattern match may do (e.g., inspecting constants and discriminant values), and the kind of pattern it comes from. This is in order to adapt potential error messages to these specific patterns.

Note that this also is emitted for regular let bindings to ensure that locals that are never accessed still get some sanity checks for, e.g., let x: ! = ..;


Write the discriminant for a variant to the enum Place.

Fields of SetDiscriminant

place: Box<Place<'tcx>>variant_index: VariantIdx

Start a live range for the storage of the local.


End the current live range for the storage of the local.


Executes a piece of inline Assembly. Stored in a Box to keep the size of StatementKind low.


Retag references in the given place, ensuring they got fresh tags. This is part of the Stacked Borrows model. These statements are currently only interpreted by miri and only generated when "-Z mir-emit-retag" is passed. See https://internals.rust-lang.org/t/stacked-borrows-an-aliasing-model-for-rust/8153/ for more details.

AscribeUserType(Box<(Place<'tcx>, UserTypeProjection)>, Variance)

Encodes a user's type ascription. These need to be preserved intact so that NLL can respect them. For example:

let a: T = y;

The effect of this annotation is to relate the type T_y of the place y to the user-given type T. The effect depends on the specified variance:


No-op. Useful for deleting instructions without affecting statement indices.

Trait Implementations

impl<'tcx> Clone for StatementKind<'tcx>[src]

impl<'tcx> Debug for StatementKind<'tcx>[src]

impl<'tcx> Decodable for StatementKind<'tcx>[src]

impl<'tcx> Encodable for StatementKind<'tcx>[src]

impl<'tcx, '__ctx> HashStable<StableHashingContext<'__ctx>> for StatementKind<'tcx>[src]

impl<'tcx> PartialEq<StatementKind<'tcx>> for StatementKind<'tcx>[src]

impl<'tcx> StructuralPartialEq for StatementKind<'tcx>[src]

impl<'tcx> TypeFoldable<'tcx> for StatementKind<'tcx>[src]

Auto Trait Implementations

impl<'tcx> !RefUnwindSafe for StatementKind<'tcx>

impl<'tcx> !Send for StatementKind<'tcx>

impl<'tcx> !Sync for StatementKind<'tcx>

impl<'tcx> Unpin for StatementKind<'tcx>

impl<'tcx> !UnwindSafe for StatementKind<'tcx>

Blanket Implementations

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

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

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

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

impl<T> Decodable for T where
    T: UseSpecializedDecodable

impl<Ctxt, T> DepNodeParams<Ctxt> for T where
    Ctxt: DepContext,
    T: HashStable<<Ctxt as DepContext>::StableHashingContext> + Debug

impl<T> Encodable for T where
    T: UseSpecializedEncodable + ?Sized

impl<T> From<T> for T[src]

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

impl<T> MaybeResult<T> for T[src]

type Error = !

impl<'tcx, T> Subst<'tcx> for T where
    T: TypeFoldable<'tcx>, 

impl<T> ToOwned for T where
    T: Clone

type Owned = T

The resulting type after obtaining ownership.

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

type Error = Infallible

The type returned in the event of a conversion error.

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

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

The type returned in the event of a conversion error.

impl<T> WithConstness for T[src]