about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src/required_consts.rs
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2021-01-01 01:53:25 +0100
committerCamille GILLOT <gillot.camille@gmail.com>2021-09-07 00:43:14 +0200
commitbba4be681d664a50ab307ec732f957c02255e067 (patch)
treed56899ff2ba1bcf004901eac1e155b2656a5e4fd /compiler/rustc_mir_transform/src/required_consts.rs
parent31a61ccc38201a13c2549b20772daf15ce0e0309 (diff)
downloadrust-bba4be681d664a50ab307ec732f957c02255e067.tar.gz
rust-bba4be681d664a50ab307ec732f957c02255e067.zip
Move rustc_mir::transform to rustc_mir_transform.
Diffstat (limited to 'compiler/rustc_mir_transform/src/required_consts.rs')
-rw-r--r--compiler/rustc_mir_transform/src/required_consts.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/compiler/rustc_mir_transform/src/required_consts.rs b/compiler/rustc_mir_transform/src/required_consts.rs
new file mode 100644
index 00000000000..8b64ad65ab3
--- /dev/null
+++ b/compiler/rustc_mir_transform/src/required_consts.rs
@@ -0,0 +1,23 @@
+use rustc_middle::mir::visit::Visitor;
+use rustc_middle::mir::{Constant, Location};
+use rustc_middle::ty::ConstKind;
+
+pub struct RequiredConstsVisitor<'a, 'tcx> {
+    required_consts: &'a mut Vec<Constant<'tcx>>,
+}
+
+impl<'a, 'tcx> RequiredConstsVisitor<'a, 'tcx> {
+    pub fn new(required_consts: &'a mut Vec<Constant<'tcx>>) -> Self {
+        RequiredConstsVisitor { required_consts }
+    }
+}
+
+impl<'a, 'tcx> Visitor<'tcx> for RequiredConstsVisitor<'a, 'tcx> {
+    fn visit_constant(&mut self, constant: &Constant<'tcx>, _: Location) {
+        if let Some(ct) = constant.literal.const_for_ty() {
+            if let ConstKind::Unevaluated(_) = ct.val {
+                self.required_consts.push(*constant);
+            }
+        }
+    }
+}