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}