about summary refs log tree commit diff
path: root/compiler/rustc_mir_dataflow/src
diff options
context:
space:
mode:
authorJannis Christopher Köhl <mail@koehl.dev>2022-10-25 00:56:51 +0200
committerJannis Christopher Köhl <mail@koehl.dev>2022-11-07 10:35:25 +0100
commit1f82a9f89e3c0388442835df632b56ccea08a971 (patch)
treef01da01ab1a395307a6cd54a407d00d3fb524bb9 /compiler/rustc_mir_dataflow/src
parentf29533b4e031771dae471bff534e3cc03ab48cd4 (diff)
downloadrust-1f82a9f89e3c0388442835df632b56ccea08a971.tar.gz
rust-1f82a9f89e3c0388442835df632b56ccea08a971.zip
Move HasTop and HasBottom into lattice.rs
Diffstat (limited to 'compiler/rustc_mir_dataflow/src')
-rw-r--r--compiler/rustc_mir_dataflow/src/framework/lattice.rs34
-rw-r--r--compiler/rustc_mir_dataflow/src/value_analysis.rs33
2 files changed, 41 insertions, 26 deletions
diff --git a/compiler/rustc_mir_dataflow/src/framework/lattice.rs b/compiler/rustc_mir_dataflow/src/framework/lattice.rs
index d6b89eb8227..f0e75c53ea1 100644
--- a/compiler/rustc_mir_dataflow/src/framework/lattice.rs
+++ b/compiler/rustc_mir_dataflow/src/framework/lattice.rs
@@ -73,6 +73,16 @@ pub trait MeetSemiLattice: Eq {
     fn meet(&mut self, other: &Self) -> bool;
 }
 
+/// A set that has a "bottom" element, which is less than or equal to any other element.
+pub trait HasBottom {
+    fn bottom() -> Self;
+}
+
+/// A set that has a "top" element, which is greater than or equal to any other element.
+pub trait HasTop {
+    fn top() -> Self;
+}
+
 /// A `bool` is a "two-point" lattice with `true` as the top element and `false` as the bottom:
 ///
 /// ```text
@@ -102,6 +112,18 @@ impl MeetSemiLattice for bool {
     }
 }
 
+impl HasBottom for bool {
+    fn bottom() -> Self {
+        false
+    }
+}
+
+impl HasTop for bool {
+    fn top() -> Self {
+        true
+    }
+}
+
 /// A tuple (or list) of lattices is itself a lattice whose least upper bound is the concatenation
 /// of the least upper bounds of each element of the tuple (or list).
 ///
@@ -250,3 +272,15 @@ impl<T: Clone + Eq> MeetSemiLattice for FlatSet<T> {
         true
     }
 }
+
+impl<T> HasBottom for FlatSet<T> {
+    fn bottom() -> Self {
+        Self::Bottom
+    }
+}
+
+impl<T> HasTop for FlatSet<T> {
+    fn top() -> Self {
+        Self::Top
+    }
+}
diff --git a/compiler/rustc_mir_dataflow/src/value_analysis.rs b/compiler/rustc_mir_dataflow/src/value_analysis.rs
index bfe714342e2..a3194ebc30c 100644
--- a/compiler/rustc_mir_dataflow/src/value_analysis.rs
+++ b/compiler/rustc_mir_dataflow/src/value_analysis.rs
@@ -56,9 +56,10 @@ use rustc_middle::ty::{self, Ty, TyCtxt};
 use rustc_span::DUMMY_SP;
 use rustc_target::abi::VariantIdx;
 
+use crate::lattice::{HasBottom, HasTop};
 use crate::{
-    fmt::DebugWithContext, lattice::FlatSet, Analysis, AnalysisDomain, CallReturnPlaces,
-    JoinSemiLattice, SwitchIntEdgeEffects,
+    fmt::DebugWithContext, Analysis, AnalysisDomain, CallReturnPlaces, JoinSemiLattice,
+    SwitchIntEdgeEffects,
 };
 
 pub trait ValueAnalysis<'tcx> {
@@ -846,8 +847,8 @@ pub enum ValueOrPlace<V> {
     Place(PlaceIndex),
 }
 
-impl<V: HasTop> HasTop for ValueOrPlace<V> {
-    fn top() -> Self {
+impl<V: HasTop> ValueOrPlace<V> {
+    pub fn top() -> Self {
         ValueOrPlace::Value(V::top())
     }
 }
@@ -859,8 +860,8 @@ pub enum ValueOrPlaceOrRef<V> {
     Ref(PlaceIndex),
 }
 
-impl<V: HasTop> HasTop for ValueOrPlaceOrRef<V> {
-    fn top() -> Self {
+impl<V: HasTop> ValueOrPlaceOrRef<V> {
+    pub fn top() -> Self {
         ValueOrPlaceOrRef::Value(V::top())
     }
 }
@@ -874,26 +875,6 @@ impl<V> From<ValueOrPlace<V>> for ValueOrPlaceOrRef<V> {
     }
 }
 
-pub trait HasBottom {
-    fn bottom() -> Self;
-}
-
-pub trait HasTop {
-    fn top() -> Self;
-}
-
-impl<V> HasBottom for FlatSet<V> {
-    fn bottom() -> Self {
-        Self::Bottom
-    }
-}
-
-impl<V> HasTop for FlatSet<V> {
-    fn top() -> Self {
-        Self::Top
-    }
-}
-
 /// The set of projection elements that can be used by a tracked place.
 ///
 /// For now, downcast is not allowed due to aliasing between variants (see #101168).