rapx/analysis/opt/checking/
bounds_checking.rs

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