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}