rapx/analysis/
test.rs

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