//! A solver for dataflow problems.
-use std::borrow::BorrowMut;
+use crate::framework::BitSetExt;
+
use std::ffi::OsString;
use std::path::PathBuf;
impl<'a, 'tcx, A, D, T> Engine<'a, 'tcx, A>
where
A: GenKillAnalysis<'tcx, Idx = T, Domain = D>,
- D: Clone + JoinSemiLattice + GenKill<T> + BorrowMut<BitSet<T>>,
+ D: Clone + JoinSemiLattice + GenKill<T> + BitSetExt<T>,
T: Idx,
{
/// Creates a new `Engine` to solve a gen-kill dataflow problem.
// Otherwise, compute and store the cumulative transfer function for each block.
- let identity = GenKillSet::identity(analysis.bottom_value(body).borrow().domain_size());
+ let identity = GenKillSet::identity(analysis.bottom_value(body).domain_size());
let mut trans_for_block = IndexVec::from_elem(identity, body.basic_blocks());
for (block, block_data) in body.basic_blocks().iter_enumerated() {
}
let apply_trans = Box::new(move |bb: BasicBlock, state: &mut A::Domain| {
- trans_for_block[bb].apply(state.borrow_mut());
+ trans_for_block[bb].apply(state);
});
Self::new(tcx, body, analysis, Some(apply_trans as Box<_>))
use std::io::{self, Write};
let def_id = body.source.def_id();
- let attrs = match RustcMirAttrs::parse(tcx, def_id) {
- Ok(attrs) => attrs,
-
+ let Ok(attrs) = RustcMirAttrs::parse(tcx, def_id) else {
// Invalid `rustc_mir` attrs are reported in `RustcMirAttrs::parse`
- Err(()) => return Ok(()),
+ return Ok(());
};
let mut file = match attrs.output_path(A::NAME) {