rapx/analysis/opt/checking/
bounds_checking.rs1use 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}