diff options
| author | Dylan MacKenzie <ecstaticmorse@gmail.com> | 2019-11-11 11:50:27 -0800 |
|---|---|---|
| committer | Dylan MacKenzie <ecstaticmorse@gmail.com> | 2020-01-14 14:37:16 -0800 |
| commit | 355cfcdf433c47bfb2365752d33f2a24dfc6e78f (patch) | |
| tree | 2f6ed5610e49fb78a9e3af690e26b920187552a6 /src | |
| parent | 7d5885727d4a42518f811933de20676f8be61818 (diff) | |
| download | rust-355cfcdf433c47bfb2365752d33f2a24dfc6e78f.tar.gz rust-355cfcdf433c47bfb2365752d33f2a24dfc6e78f.zip | |
Use unified dataflow framework in `check_consts`
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/transform/check_consts/resolver.rs | 7 | ||||
| -rw-r--r-- | src/librustc_mir/transform/check_consts/validation.rs | 15 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/librustc_mir/transform/check_consts/resolver.rs b/src/librustc_mir/transform/check_consts/resolver.rs index c445568dd2a..2cd2495eef8 100644 --- a/src/librustc_mir/transform/check_consts/resolver.rs +++ b/src/librustc_mir/transform/check_consts/resolver.rs @@ -158,7 +158,7 @@ impl<Q> old_dataflow::BottomValue for FlowSensitiveAnalysis<'_, '_, '_, Q> { const BOTTOM_VALUE: bool = false; } -impl<Q> dataflow::Analysis<'tcx> for FlowSensitiveAnalysis<'_, '_, 'tcx, Q> +impl<Q> dataflow::AnalysisDomain<'tcx> for FlowSensitiveAnalysis<'_, '_, 'tcx, Q> where Q: Qualif, { @@ -173,7 +173,12 @@ where fn initialize_start_block(&self, _body: &mir::Body<'tcx>, state: &mut BitSet<Self::Idx>) { self.transfer_function(state).initialize_state(); } +} +impl<Q> dataflow::Analysis<'tcx> for FlowSensitiveAnalysis<'_, '_, 'tcx, Q> +where + Q: Qualif, +{ fn apply_statement_effect( &self, state: &mut BitSet<Self::Idx>, diff --git a/src/librustc_mir/transform/check_consts/validation.rs b/src/librustc_mir/transform/check_consts/validation.rs index 10a4b7d92b7..243077a7c2f 100644 --- a/src/librustc_mir/transform/check_consts/validation.rs +++ b/src/librustc_mir/transform/check_consts/validation.rs @@ -33,11 +33,10 @@ struct QualifCursor<'a, 'mir, 'tcx, Q: Qualif> { } impl<Q: Qualif> QualifCursor<'a, 'mir, 'tcx, Q> { - pub fn new(q: Q, item: &'a Item<'mir, 'tcx>, dead_unwinds: &BitSet<BasicBlock>) -> Self { + pub fn new(q: Q, item: &'a Item<'mir, 'tcx>) -> Self { let analysis = FlowSensitiveAnalysis::new(q, item); - let results = - dataflow::Engine::new(item.tcx, &item.body, item.def_id, dead_unwinds, analysis) - .iterate_to_fixpoint(); + let results = dataflow::Engine::new_generic(item.tcx, &item.body, item.def_id, analysis) + .iterate_to_fixpoint(); let cursor = dataflow::ResultsCursor::new(*item.body, results); let mut in_any_value_of_ty = BitSet::new_empty(item.body.local_decls.len()); @@ -146,12 +145,10 @@ impl Deref for Validator<'_, 'mir, 'tcx> { impl Validator<'a, 'mir, 'tcx> { pub fn new(item: &'a Item<'mir, 'tcx>) -> Self { - let dead_unwinds = BitSet::new_empty(item.body.basic_blocks().len()); - - let needs_drop = QualifCursor::new(NeedsDrop, item, &dead_unwinds); - - let has_mut_interior = QualifCursor::new(HasMutInterior, item, &dead_unwinds); + let needs_drop = QualifCursor::new(NeedsDrop, item); + let has_mut_interior = QualifCursor::new(HasMutInterior, item); + let dead_unwinds = BitSet::new_empty(item.body.basic_blocks().len()); let indirectly_mutable = old_dataflow::do_dataflow( item.tcx, &*item.body, |
