Extract handle_set_discriminant.

This commit is contained in:
Camille GILLOT 2023-04-25 19:47:15 +00:00
parent 2b0bf3cf59
commit add5124dce
2 changed files with 35 additions and 17 deletions

View File

@ -67,8 +67,8 @@ pub trait ValueAnalysis<'tcx> {
StatementKind::Assign(box (place, rvalue)) => { StatementKind::Assign(box (place, rvalue)) => {
self.handle_assign(*place, rvalue, state); self.handle_assign(*place, rvalue, state);
} }
StatementKind::SetDiscriminant { box ref place, .. } => { StatementKind::SetDiscriminant { box place, variant_index } => {
state.flood_discr(place.as_ref(), self.map()); self.handle_set_discriminant(*place, *variant_index, state);
} }
StatementKind::Intrinsic(box intrinsic) => { StatementKind::Intrinsic(box intrinsic) => {
self.handle_intrinsic(intrinsic, state); self.handle_intrinsic(intrinsic, state);
@ -94,6 +94,24 @@ pub trait ValueAnalysis<'tcx> {
} }
} }
fn handle_set_discriminant(
&self,
place: Place<'tcx>,
variant_index: VariantIdx,
state: &mut State<Self::Value>,
) {
self.super_set_discriminant(place, variant_index, state)
}
fn super_set_discriminant(
&self,
place: Place<'tcx>,
_variant_index: VariantIdx,
state: &mut State<Self::Value>,
) {
state.flood_discr(place.as_ref(), self.map());
}
fn handle_intrinsic( fn handle_intrinsic(
&self, &self,
intrinsic: &NonDivergingIntrinsic<'tcx>, intrinsic: &NonDivergingIntrinsic<'tcx>,

View File

@ -79,9 +79,12 @@ impl<'tcx> ValueAnalysis<'tcx> for ConstAnalysis<'_, 'tcx> {
&self.map &self.map
} }
fn handle_statement(&self, statement: &Statement<'tcx>, state: &mut State<Self::Value>) { fn handle_set_discriminant(
match statement.kind { &self,
StatementKind::SetDiscriminant { box ref place, variant_index } => { place: Place<'tcx>,
variant_index: VariantIdx,
state: &mut State<Self::Value>,
) {
state.flood_discr(place.as_ref(), &self.map); state.flood_discr(place.as_ref(), &self.map);
if self.map.find_discr(place.as_ref()).is_some() { if self.map.find_discr(place.as_ref()).is_some() {
let enum_ty = place.ty(self.local_decls, self.tcx).ty; let enum_ty = place.ty(self.local_decls, self.tcx).ty;
@ -94,9 +97,6 @@ impl<'tcx> ValueAnalysis<'tcx> for ConstAnalysis<'_, 'tcx> {
} }
} }
} }
_ => self.super_statement(statement, state),
}
}
fn handle_assign( fn handle_assign(
&self, &self,