]> git.lizzy.rs Git - rust.git/blob - src/librustc_mir/transform/uneval_const_set.rs
Add MirPass to collect Unevaluated consts in MIR body
[rust.git] / src / librustc_mir / transform / uneval_const_set.rs
1 use rustc_middle::mir::visit::Visitor;
2 use rustc_middle::mir::{Constant, Location};
3 use rustc_middle::ty::ConstKind;
4
5 pub struct UnevalConstSetVisitor<'a, 'tcx> {
6     uneval_consts: &'a mut Vec<Constant<'tcx>>,
7 }
8
9 impl<'a, 'tcx> UnevalConstSetVisitor<'a, 'tcx> {
10     pub fn new(uneval_consts: &'a mut Vec<Constant<'tcx>>) -> Self {
11         UnevalConstSetVisitor { uneval_consts }
12     }
13 }
14
15 impl<'a, 'tcx> Visitor<'tcx> for UnevalConstSetVisitor<'a, 'tcx> {
16     fn visit_constant(&mut self, constant: &Constant<'tcx>, _: Location) {
17         let const_kind = constant.literal.val;
18
19         if let ConstKind::Unevaluated(_, _, _) = const_kind {
20             self.uneval_consts.push(*constant);
21         }
22     }
23 }