diff --git a/compiler/rustc_mir_dataflow/src/framework/mod.rs b/compiler/rustc_mir_dataflow/src/framework/mod.rs index 25c1579d4d4d6..f69f0e89d6598 100644 --- a/compiler/rustc_mir_dataflow/src/framework/mod.rs +++ b/compiler/rustc_mir_dataflow/src/framework/mod.rs @@ -122,14 +122,6 @@ pub trait Analysis<'tcx> { // `resume`). It's not obvious how to handle `yield` points in coroutines, however. fn initialize_start_block(&self, body: &mir::Body<'tcx>, state: &mut Self::Domain); - /// Updates the current dataflow state with the effect of evaluating a statement. - fn apply_primary_statement_effect( - &mut self, - state: &mut Self::Domain, - statement: &mir::Statement<'tcx>, - location: Location, - ); - /// Updates the current dataflow state with an "early" effect, i.e. one /// that occurs immediately before the given statement. /// @@ -145,20 +137,13 @@ pub trait Analysis<'tcx> { ) { } - /// Updates the current dataflow state with the effect of evaluating a terminator. - /// - /// The effect of a successful return from a `Call` terminator should **not** be accounted for - /// in this function. That should go in `apply_call_return_effect`. For example, in the - /// `InitializedPlaces` analyses, the return place for a function call is not marked as - /// initialized here. - fn apply_primary_terminator_effect<'mir>( + /// Updates the current dataflow state with the effect of evaluating a statement. + fn apply_primary_statement_effect( &mut self, - _state: &mut Self::Domain, - terminator: &'mir mir::Terminator<'tcx>, - _location: Location, - ) -> TerminatorEdges<'mir, 'tcx> { - terminator.edges() - } + state: &mut Self::Domain, + statement: &mir::Statement<'tcx>, + location: Location, + ); /// Updates the current dataflow state with an effect that occurs immediately *before* the /// given terminator. @@ -175,6 +160,21 @@ pub trait Analysis<'tcx> { ) { } + /// Updates the current dataflow state with the effect of evaluating a terminator. + /// + /// The effect of a successful return from a `Call` terminator should **not** be accounted for + /// in this function. That should go in `apply_call_return_effect`. For example, in the + /// `InitializedPlaces` analyses, the return place for a function call is not marked as + /// initialized here. + fn apply_primary_terminator_effect<'mir>( + &mut self, + _state: &mut Self::Domain, + terminator: &'mir mir::Terminator<'tcx>, + _location: Location, + ) -> TerminatorEdges<'mir, 'tcx> { + terminator.edges() + } + /* Edge-specific effects */ /// Updates the current dataflow state with the effect of a successful return from a `Call` diff --git a/compiler/rustc_mir_dataflow/src/framework/tests.rs b/compiler/rustc_mir_dataflow/src/framework/tests.rs index 87cd7ba2ec5a3..8e7d4ab0fa33b 100644 --- a/compiler/rustc_mir_dataflow/src/framework/tests.rs +++ b/compiler/rustc_mir_dataflow/src/framework/tests.rs @@ -168,6 +168,16 @@ impl<'tcx, D: Direction> Analysis<'tcx> for MockAnalysis<'tcx, D> { unimplemented!("This is never called since `MockAnalysis` is never iterated to fixpoint"); } + fn apply_early_statement_effect( + &mut self, + state: &mut Self::Domain, + _statement: &mir::Statement<'tcx>, + location: Location, + ) { + let idx = self.effect(Effect::Early.at_index(location.statement_index)); + assert!(state.insert(idx)); + } + fn apply_primary_statement_effect( &mut self, state: &mut Self::Domain, @@ -178,10 +188,10 @@ impl<'tcx, D: Direction> Analysis<'tcx> for MockAnalysis<'tcx, D> { assert!(state.insert(idx)); } - fn apply_early_statement_effect( + fn apply_early_terminator_effect( &mut self, state: &mut Self::Domain, - _statement: &mir::Statement<'tcx>, + _terminator: &mir::Terminator<'tcx>, location: Location, ) { let idx = self.effect(Effect::Early.at_index(location.statement_index)); @@ -198,16 +208,6 @@ impl<'tcx, D: Direction> Analysis<'tcx> for MockAnalysis<'tcx, D> { assert!(state.insert(idx)); terminator.edges() } - - fn apply_early_terminator_effect( - &mut self, - state: &mut Self::Domain, - _terminator: &mir::Terminator<'tcx>, - location: Location, - ) { - let idx = self.effect(Effect::Early.at_index(location.statement_index)); - assert!(state.insert(idx)); - } } #[derive(Clone, Copy, Debug, PartialEq, Eq)]