rapx/analysis/opt/data_collection/
initialization.rs

1pub mod local_set;
2pub mod vec_init;
3
4use local_set::LocalSetCheck;
5use vec_init::VecInitCheck;
6
7use crate::analysis::core::dataflow::graph::Graph;
8use crate::analysis::opt::OptCheck;
9
10use super::super::LEVEL;
11use rustc_middle::ty::TyCtxt;
12
13pub struct InitializationCheck {
14    local_set: LocalSetCheck,
15    vec_init: VecInitCheck,
16}
17
18impl OptCheck for InitializationCheck {
19    fn new() -> Self {
20        Self {
21            local_set: LocalSetCheck::new(),
22            vec_init: VecInitCheck::new(),
23        }
24    }
25
26    fn check(&mut self, graph: &Graph, tcx: &TyCtxt) {
27        let level = LEVEL.lock().unwrap();
28        if *level == 2 {
29            self.local_set.check(graph, tcx);
30            self.vec_init.check(graph, tcx);
31        }
32    }
33
34    fn report(&self, graph: &Graph) {
35        self.local_set.report(graph);
36        self.vec_init.report(graph);
37    }
38
39    fn cnt(&self) -> usize {
40        self.local_set.cnt() + self.vec_init.cnt()
41    }
42}