diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2023-05-06 22:01:22 +0000 | 
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2023-08-16 18:12:17 +0000 | 
| commit | 32711b2b4e1d0868b5576e568e27024186f8aa38 (patch) | |
| tree | 1575c43188e7cb16eb0480b220ac693673af72ee /compiler/rustc_mir_dataflow/src/framework/mod.rs | |
| parent | 934a99eb659761353e9b89538bd5de356b0f7dfe (diff) | |
| download | rust-32711b2b4e1d0868b5576e568e27024186f8aa38.tar.gz rust-32711b2b4e1d0868b5576e568e27024186f8aa38.zip | |
Introduce MaybeUnreachable.
Diffstat (limited to 'compiler/rustc_mir_dataflow/src/framework/mod.rs')
| -rw-r--r-- | compiler/rustc_mir_dataflow/src/framework/mod.rs | 18 | 
1 files changed, 17 insertions, 1 deletions
| diff --git a/compiler/rustc_mir_dataflow/src/framework/mod.rs b/compiler/rustc_mir_dataflow/src/framework/mod.rs index 8ccd57802d7..b40cf9f4691 100644 --- a/compiler/rustc_mir_dataflow/src/framework/mod.rs +++ b/compiler/rustc_mir_dataflow/src/framework/mod.rs @@ -48,7 +48,7 @@ mod visitor; pub use self::cursor::{AnalysisResults, ResultsClonedCursor, ResultsCursor, ResultsRefCursor}; pub use self::direction::{Backward, Direction, Forward}; pub use self::engine::{Engine, EntrySets, Results, ResultsCloned}; -pub use self::lattice::{JoinSemiLattice, MeetSemiLattice}; +pub use self::lattice::{JoinSemiLattice, MaybeUnreachable, MeetSemiLattice}; pub use self::visitor::{visit_results, ResultsVisitable, ResultsVisitor}; /// Analysis domains are all bitsets of various kinds. This trait holds @@ -524,6 +524,22 @@ impl<T: Idx> GenKill<T> for ChunkedBitSet<T> { } } +impl<T, S: GenKill<T>> GenKill<T> for MaybeUnreachable<S> { + fn gen(&mut self, elem: T) { + match self { + MaybeUnreachable::Unreachable => {} + MaybeUnreachable::Reachable(set) => set.gen(elem), + } + } + + fn kill(&mut self, elem: T) { + match self { + MaybeUnreachable::Unreachable => {} + MaybeUnreachable::Reachable(set) => set.kill(elem), + } + } +} + impl<T: Idx> GenKill<T> for lattice::Dual<BitSet<T>> { fn gen(&mut self, elem: T) { self.0.insert(elem); | 
