[−][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 Storage Dead.

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 }
}

Fields

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

Implementations

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

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

Trait Implementations

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

type Idx = InitIndex

The type of the elements in the state vector.

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

const BOTTOM_VALUE: bool[src]

bottom = no initialized variables by default

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

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, 
[src]

impl<T> Borrow<T> for T where
    T: ?Sized, 
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized, 
[src]

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

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<T> WithConstness for T[src]