[][src]Struct rustc_mir::dataflow::impls::EverInitializedPlaces

pub struct EverInitializedPlaces<'a, 'tcx> {
    tcx: TyCtxt<'tcx>,
    body: &'a Body<'tcx>,
    mdpe: &'a MoveDataParamEnv<'tcx>,

EverInitializedPlaces tracks all places that might have ever been initialized upon reaching a particular point in the control flow for a function, without an intervening StorageDead.

This dataflow is used to determine if an immutable local variable may be assigned to.

For example, in code like the following, we have corresponding dataflow information shown in the right-hand comments.

struct S;
fn foo(pred: bool) {                       // ever-init:
                                           // {          }
    let a = S; let b = S; let c; let d;    // {a, b      }

    if pred {
        drop(a);                           // {a, b,     }
        b = S;                             // {a, b,     }

    } else {
        drop(b);                           // {a, b,      }
        d = S;                             // {a, b,    d }

    }                                      // {a, b,    d }

    c = S;                                 // {a, b, c, d }


tcx: TyCtxt<'tcx>body: &'a Body<'tcx>mdpe: &'a MoveDataParamEnv<'tcx>


impl<'a, 'tcx> EverInitializedPlaces<'a, 'tcx>[src]

pub fn new(
    tcx: TyCtxt<'tcx>,
    body: &'a Body<'tcx>,
    mdpe: &'a MoveDataParamEnv<'tcx>
) -> Self

Trait Implementations

impl<'tcx, '_> AnalysisDomain<'tcx> for EverInitializedPlaces<'_, 'tcx>[src]

type Domain = BitSet<InitIndex>

The type that holds the dataflow state at any given point in the program.

impl<'tcx, '_> GenKillAnalysis<'tcx> for EverInitializedPlaces<'_, 'tcx>[src]

type Idx = InitIndex

impl<'a, 'tcx> HasMoveData<'tcx> for EverInitializedPlaces<'a, 'tcx>[src]

Auto Trait Implementations

impl<'a, 'tcx> !RefUnwindSafe for EverInitializedPlaces<'a, 'tcx>

impl<'a, 'tcx> !Send for EverInitializedPlaces<'a, 'tcx>

impl<'a, 'tcx> !Sync for EverInitializedPlaces<'a, 'tcx>

impl<'a, 'tcx> Unpin for EverInitializedPlaces<'a, 'tcx> where
    'tcx: 'a, 

impl<'a, 'tcx> !UnwindSafe for EverInitializedPlaces<'a, '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<T> From<T> for T[src]

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

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]