rustc_mir_dataflow::value_analysis

Trait ValueAnalysis

source
pub trait ValueAnalysis<'tcx> {
    type Value: Clone + JoinSemiLattice + HasBottom + HasTop + Debug;

    const NAME: &'static str;
Show 22 methods // Required method fn map(&self) -> &Map<'tcx>; // Provided methods fn handle_statement( &self, statement: &Statement<'tcx>, state: &mut State<Self::Value>, ) { ... } fn super_statement( &self, statement: &Statement<'tcx>, state: &mut State<Self::Value>, ) { ... } fn handle_set_discriminant( &self, place: Place<'tcx>, variant_index: VariantIdx, state: &mut State<Self::Value>, ) { ... } fn super_set_discriminant( &self, place: Place<'tcx>, _variant_index: VariantIdx, state: &mut State<Self::Value>, ) { ... } fn handle_intrinsic( &self, intrinsic: &NonDivergingIntrinsic<'tcx>, state: &mut State<Self::Value>, ) { ... } fn super_intrinsic( &self, intrinsic: &NonDivergingIntrinsic<'tcx>, _state: &mut State<Self::Value>, ) { ... } fn handle_assign( &self, target: Place<'tcx>, rvalue: &Rvalue<'tcx>, state: &mut State<Self::Value>, ) { ... } fn super_assign( &self, target: Place<'tcx>, rvalue: &Rvalue<'tcx>, state: &mut State<Self::Value>, ) { ... } fn handle_rvalue( &self, rvalue: &Rvalue<'tcx>, state: &mut State<Self::Value>, ) -> ValueOrPlace<Self::Value> { ... } fn super_rvalue( &self, rvalue: &Rvalue<'tcx>, state: &mut State<Self::Value>, ) -> ValueOrPlace<Self::Value> { ... } fn handle_operand( &self, operand: &Operand<'tcx>, state: &mut State<Self::Value>, ) -> ValueOrPlace<Self::Value> { ... } fn super_operand( &self, operand: &Operand<'tcx>, state: &mut State<Self::Value>, ) -> ValueOrPlace<Self::Value> { ... } fn handle_constant( &self, constant: &ConstOperand<'tcx>, state: &mut State<Self::Value>, ) -> Self::Value { ... } fn super_constant( &self, _constant: &ConstOperand<'tcx>, _state: &mut State<Self::Value>, ) -> Self::Value { ... } fn handle_terminator<'mir>( &self, terminator: &'mir Terminator<'tcx>, state: &mut State<Self::Value>, ) -> TerminatorEdges<'mir, 'tcx> { ... } fn super_terminator<'mir>( &self, terminator: &'mir Terminator<'tcx>, state: &mut State<Self::Value>, ) -> TerminatorEdges<'mir, 'tcx> { ... } fn handle_call_return( &self, return_places: CallReturnPlaces<'_, 'tcx>, state: &mut State<Self::Value>, ) { ... } fn super_call_return( &self, return_places: CallReturnPlaces<'_, 'tcx>, state: &mut State<Self::Value>, ) { ... } fn handle_switch_int<'mir>( &self, discr: &'mir Operand<'tcx>, targets: &'mir SwitchTargets, state: &mut State<Self::Value>, ) -> TerminatorEdges<'mir, 'tcx> { ... } fn super_switch_int<'mir>( &self, discr: &'mir Operand<'tcx>, targets: &'mir SwitchTargets, _state: &mut State<Self::Value>, ) -> TerminatorEdges<'mir, 'tcx> { ... } fn wrap(self) -> ValueAnalysisWrapper<Self> where Self: Sized { ... }
}

Required Associated Constants§

source

const NAME: &'static str

Required Associated Types§

source

type Value: Clone + JoinSemiLattice + HasBottom + HasTop + Debug

For each place of interest, the analysis tracks a value of the given type.

Required Methods§

source

fn map(&self) -> &Map<'tcx>

Provided Methods§

source

fn handle_statement( &self, statement: &Statement<'tcx>, state: &mut State<Self::Value>, )

source

fn super_statement( &self, statement: &Statement<'tcx>, state: &mut State<Self::Value>, )

source

fn handle_set_discriminant( &self, place: Place<'tcx>, variant_index: VariantIdx, state: &mut State<Self::Value>, )

source

fn super_set_discriminant( &self, place: Place<'tcx>, _variant_index: VariantIdx, state: &mut State<Self::Value>, )

source

fn handle_intrinsic( &self, intrinsic: &NonDivergingIntrinsic<'tcx>, state: &mut State<Self::Value>, )

source

fn super_intrinsic( &self, intrinsic: &NonDivergingIntrinsic<'tcx>, _state: &mut State<Self::Value>, )

source

fn handle_assign( &self, target: Place<'tcx>, rvalue: &Rvalue<'tcx>, state: &mut State<Self::Value>, )

source

fn super_assign( &self, target: Place<'tcx>, rvalue: &Rvalue<'tcx>, state: &mut State<Self::Value>, )

source

fn handle_rvalue( &self, rvalue: &Rvalue<'tcx>, state: &mut State<Self::Value>, ) -> ValueOrPlace<Self::Value>

source

fn super_rvalue( &self, rvalue: &Rvalue<'tcx>, state: &mut State<Self::Value>, ) -> ValueOrPlace<Self::Value>

source

fn handle_operand( &self, operand: &Operand<'tcx>, state: &mut State<Self::Value>, ) -> ValueOrPlace<Self::Value>

source

fn super_operand( &self, operand: &Operand<'tcx>, state: &mut State<Self::Value>, ) -> ValueOrPlace<Self::Value>

source

fn handle_constant( &self, constant: &ConstOperand<'tcx>, state: &mut State<Self::Value>, ) -> Self::Value

source

fn super_constant( &self, _constant: &ConstOperand<'tcx>, _state: &mut State<Self::Value>, ) -> Self::Value

source

fn handle_terminator<'mir>( &self, terminator: &'mir Terminator<'tcx>, state: &mut State<Self::Value>, ) -> TerminatorEdges<'mir, 'tcx>

The effect of a successful function call return should not be applied here, see Analysis::apply_terminator_effect.

source

fn super_terminator<'mir>( &self, terminator: &'mir Terminator<'tcx>, state: &mut State<Self::Value>, ) -> TerminatorEdges<'mir, 'tcx>

source

fn handle_call_return( &self, return_places: CallReturnPlaces<'_, 'tcx>, state: &mut State<Self::Value>, )

source

fn super_call_return( &self, return_places: CallReturnPlaces<'_, 'tcx>, state: &mut State<Self::Value>, )

source

fn handle_switch_int<'mir>( &self, discr: &'mir Operand<'tcx>, targets: &'mir SwitchTargets, state: &mut State<Self::Value>, ) -> TerminatorEdges<'mir, 'tcx>

source

fn super_switch_int<'mir>( &self, discr: &'mir Operand<'tcx>, targets: &'mir SwitchTargets, _state: &mut State<Self::Value>, ) -> TerminatorEdges<'mir, 'tcx>

source

fn wrap(self) -> ValueAnalysisWrapper<Self>
where Self: Sized,

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§