rapx/analysis/
test.rs

1use crate::analysis::{
2    Analysis,
3    core::{
4        alias_analysis::{AAResultMapWrapper, AliasAnalysis, default::AliasAnalyzer},
5        dataflow::{Arg2RetMapWrapper, DataFlowAnalysis, default::DataFlowAnalyzer},
6        ownedheap_analysis::{OHAResultMapWrapper, OwnedHeapAnalysis, default::OwnedHeapAnalyzer},
7        range_analysis::{PathConstraintMapWrapper, RangeAnalysis, default::RangeAnalyzer},
8    },
9};
10
11use rustc_middle::ty::TyCtxt;
12
13pub struct Test<'tcx> {
14    pub tcx: TyCtxt<'tcx>,
15}
16
17impl<'tcx> Test<'tcx> {
18    pub fn new(tcx: TyCtxt<'tcx>) -> Self {
19        Self { tcx }
20    }
21
22    pub fn start(&self) {
23        let mut alias_analysis = AliasAnalyzer::new(self.tcx);
24        alias_analysis.run();
25        let result = alias_analysis.get_local_fn_alias();
26        rap_info!("{}", AAResultMapWrapper(result));
27
28        let mut dataflow_analysis = DataFlowAnalyzer::new(self.tcx, false);
29        dataflow_analysis.run();
30        let dataflow = dataflow_analysis.get_all_arg2ret();
31        rap_info!("{}", Arg2RetMapWrapper(dataflow));
32
33        let mut heap_analysis = OwnedHeapAnalyzer::new(self.tcx);
34        heap_analysis.run();
35        let result = heap_analysis.get_all_items();
36        rap_info!("{}", OHAResultMapWrapper(result));
37
38        let mut range_analysis = RangeAnalyzer::<i64>::new(self.tcx, false);
39        range_analysis.run();
40        let path_constraint = range_analysis.get_all_path_constraints();
41        rap_info!("{}", PathConstraintMapWrapper(path_constraint));
42    }
43}