Skip to content

Commit add5124

Browse files
committed
Extract handle_set_discriminant.
1 parent 2b0bf3c commit add5124

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

compiler/rustc_mir_dataflow/src/value_analysis.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ pub trait ValueAnalysis<'tcx> {
6767
StatementKind::Assign(box (place, rvalue)) => {
6868
self.handle_assign(*place, rvalue, state);
6969
}
70-
StatementKind::SetDiscriminant { box ref place, .. } => {
71-
state.flood_discr(place.as_ref(), self.map());
70+
StatementKind::SetDiscriminant { box place, variant_index } => {
71+
self.handle_set_discriminant(*place, *variant_index, state);
7272
}
7373
StatementKind::Intrinsic(box intrinsic) => {
7474
self.handle_intrinsic(intrinsic, state);
@@ -94,6 +94,24 @@ pub trait ValueAnalysis<'tcx> {
9494
}
9595
}
9696

97+
fn handle_set_discriminant(
98+
&self,
99+
place: Place<'tcx>,
100+
variant_index: VariantIdx,
101+
state: &mut State<Self::Value>,
102+
) {
103+
self.super_set_discriminant(place, variant_index, state)
104+
}
105+
106+
fn super_set_discriminant(
107+
&self,
108+
place: Place<'tcx>,
109+
_variant_index: VariantIdx,
110+
state: &mut State<Self::Value>,
111+
) {
112+
state.flood_discr(place.as_ref(), self.map());
113+
}
114+
97115
fn handle_intrinsic(
98116
&self,
99117
intrinsic: &NonDivergingIntrinsic<'tcx>,

compiler/rustc_mir_transform/src/dataflow_const_prop.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -79,22 +79,22 @@ impl<'tcx> ValueAnalysis<'tcx> for ConstAnalysis<'_, 'tcx> {
7979
&self.map
8080
}
8181

82-
fn handle_statement(&self, statement: &Statement<'tcx>, state: &mut State<Self::Value>) {
83-
match statement.kind {
84-
StatementKind::SetDiscriminant { box ref place, variant_index } => {
85-
state.flood_discr(place.as_ref(), &self.map);
86-
if self.map.find_discr(place.as_ref()).is_some() {
87-
let enum_ty = place.ty(self.local_decls, self.tcx).ty;
88-
if let Some(discr) = self.eval_discriminant(enum_ty, variant_index) {
89-
state.assign_discr(
90-
place.as_ref(),
91-
ValueOrPlace::Value(FlatSet::Elem(discr)),
92-
&self.map,
93-
);
94-
}
95-
}
82+
fn handle_set_discriminant(
83+
&self,
84+
place: Place<'tcx>,
85+
variant_index: VariantIdx,
86+
state: &mut State<Self::Value>,
87+
) {
88+
state.flood_discr(place.as_ref(), &self.map);
89+
if self.map.find_discr(place.as_ref()).is_some() {
90+
let enum_ty = place.ty(self.local_decls, self.tcx).ty;
91+
if let Some(discr) = self.eval_discriminant(enum_ty, variant_index) {
92+
state.assign_discr(
93+
place.as_ref(),
94+
ValueOrPlace::Value(FlatSet::Elem(discr)),
95+
&self.map,
96+
);
9697
}
97-
_ => self.super_statement(statement, state),
9898
}
9999
}
100100

0 commit comments

Comments
 (0)