Ignore terminators explicitly

This commit is contained in:
Jannis Christopher Köhl 2022-09-02 00:37:38 +02:00
parent 469fb197d0
commit 16dedba1c8
2 changed files with 15 additions and 6 deletions

View File

@ -146,10 +146,7 @@ pub trait ValueAnalysis<'tcx> {
Rvalue::CopyForDeref(place) => { Rvalue::CopyForDeref(place) => {
self.handle_operand(&Operand::Copy(*place), state).into() self.handle_operand(&Operand::Copy(*place), state).into()
} }
_ => { _ => ValueOrPlaceOrRef::Unknown,
// FIXME: Check that other Rvalues really have no side-effect.
ValueOrPlaceOrRef::Unknown
}
} }
} }
@ -200,7 +197,20 @@ pub trait ValueAnalysis<'tcx> {
self.super_terminator(terminator, state) self.super_terminator(terminator, state)
} }
fn super_terminator(&self, _terminator: &Terminator<'tcx>, _state: &mut State<Self::Value>) {} fn super_terminator(&self, terminator: &Terminator<'tcx>, _state: &mut State<Self::Value>) {
match &terminator.kind {
TerminatorKind::Call { .. } | TerminatorKind::InlineAsm { .. } => {
// Effect is applied by `handle_call_return`.
}
TerminatorKind::DropAndReplace { .. } | TerminatorKind::Yield { .. } => {
// They would have an effect, but are not allowed in this phase.
bug!("encountered disallowed terminator");
}
_ => {
// The other terminators can be ignored.
}
}
}
fn handle_call_return( fn handle_call_return(
&self, &self,

View File

@ -35,7 +35,6 @@ impl<'tcx> MirPass<'tcx> for DataflowConstProp {
} }
} }
// FIXME: Consider support for discriminants, mutable references, arrays and slices.
struct ConstAnalysis<'tcx> { struct ConstAnalysis<'tcx> {
map: Map, map: Map,
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,