rapx/analysis/opt/data_collection/
reallocation.rs

1pub mod flatten_collect;
2pub mod unreserved_hash;
3pub mod unreserved_vec;
4
5use flatten_collect::FlattenCollectCheck;
6use unreserved_hash::UnreservedHashCheck;
7use unreserved_vec::UnreservedVecCheck;
8
9use crate::analysis::core::dataflow::graph::Graph;
10use crate::analysis::opt::OptCheck;
11
12use rustc_middle::ty::TyCtxt;
13
14pub struct ReservationCheck {
15    unreserved_hash: UnreservedHashCheck,
16    unreserved_vec: UnreservedVecCheck,
17    flatten_collect: FlattenCollectCheck,
18}
19
20impl OptCheck for ReservationCheck {
21    fn new() -> Self {
22        Self {
23            unreserved_hash: UnreservedHashCheck::new(),
24            unreserved_vec: UnreservedVecCheck::new(),
25            flatten_collect: FlattenCollectCheck::new(),
26        }
27    }
28
29    fn check(&mut self, graph: &Graph, tcx: &TyCtxt) {
30        self.unreserved_hash.check(graph, tcx);
31        self.unreserved_vec.check(graph, tcx);
32        self.flatten_collect.check(graph, tcx);
33    }
34
35    fn report(&self, graph: &Graph) {
36        self.unreserved_hash.report(graph);
37        self.unreserved_vec.report(graph);
38        self.flatten_collect.report(graph);
39    }
40
41    fn cnt(&self) -> usize {
42        self.unreserved_hash.cnt() + self.unreserved_vec.cnt() + self.flatten_collect.cnt()
43    }
44}