svf-lib 1.0.732 → 1.0.736
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-linux/Release-build/lib/libSvf.a +0 -0
- package/SVF-linux/include/DDA/ContextDDA.h +1 -1
- package/SVF-linux/include/DDA/DDAClient.h +8 -8
- package/SVF-linux/include/DDA/DDAVFSolver.h +5 -5
- package/SVF-linux/include/DDA/FlowDDA.h +1 -1
- package/SVF-linux/include/Graphs/ConsG.h +6 -6
- package/SVF-linux/include/Graphs/ConsGEdge.h +2 -2
- package/SVF-linux/include/Graphs/ConsGNode.h +1 -1
- package/SVF-linux/include/Graphs/ExternalPAG.h +14 -14
- package/SVF-linux/include/Graphs/GenericGraph.h +1 -1
- package/SVF-linux/include/Graphs/ICFGNode.h +14 -14
- package/SVF-linux/include/Graphs/IRGraph.h +236 -0
- package/SVF-linux/include/Graphs/OfflineConsG.h +1 -1
- package/SVF-linux/include/Graphs/SVFG.h +1 -1
- package/SVF-linux/include/Graphs/SVFGOPT.h +3 -3
- package/SVF-linux/include/Graphs/VFG.h +37 -52
- package/SVF-linux/include/Graphs/VFGNode.h +2 -3
- package/SVF-linux/include/MSSA/MemRegion.h +11 -11
- package/SVF-linux/include/MSSA/MemSSA.h +4 -4
- package/SVF-linux/include/MTA/FSMPTA.h +1 -1
- package/SVF-linux/include/MemoryModel/PAGBuilderFromFile.h +8 -8
- package/SVF-linux/include/MemoryModel/PTAStat.h +31 -31
- package/SVF-linux/include/MemoryModel/PointerAnalysis.h +9 -9
- package/SVF-linux/include/MemoryModel/PointerAnalysisImpl.h +3 -3
- package/SVF-linux/include/MemoryModel/SVFIR.h +526 -235
- package/SVF-linux/include/MemoryModel/SVFStatements.h +872 -0
- package/SVF-linux/include/MemoryModel/SVFVariables.h +842 -0
- package/SVF-linux/include/MemoryModel/SymbolTableInfo.h +346 -55
- package/SVF-linux/include/SABER/SaberSVFGBuilder.h +0 -2
- package/SVF-linux/include/SABER/SrcSnkDDA.h +3 -3
- package/SVF-linux/include/SVF-FE/Graph2Json.h +1 -3
- package/SVF-linux/include/SVF-FE/SVFIRBuilder.h +398 -0
- package/SVF-linux/include/SVF-FE/SymbolTableBuilder.h +0 -1
- package/SVF-linux/include/Util/CFLSolver.h +1 -1
- package/SVF-linux/include/Util/ExtAPI.h +1 -1
- package/SVF-linux/include/Util/IRAnnotator.h +6 -6
- package/SVF-linux/include/Util/Options.h +1 -1
- package/SVF-linux/include/Util/TypeBasedHeapCloning.h +11 -11
- package/SVF-linux/include/WPA/Andersen.h +11 -11
- package/SVF-linux/include/WPA/AndersenSFR.h +4 -4
- package/SVF-linux/include/WPA/FlowSensitive.h +2 -2
- package/SVF-linux/include/WPA/FlowSensitiveTBHC.h +1 -1
- package/SVF-linux/include/WPA/Steensgaard.h +2 -2
- package/SVF-linux/include/WPA/TypeAnalysis.h +1 -1
- package/SVF-linux/include/WPA/VersionedFlowSensitive.h +2 -2
- package/SVF-linux/include/WPA/WPAStat.h +1 -2
- package/SVF-osx/Release-build/lib/CUDD/libCudd.a +0 -0
- package/SVF-osx/Release-build/lib/libSvf.a +0 -0
- package/SVF-osx/include/DDA/ContextDDA.h +1 -1
- package/SVF-osx/include/DDA/DDAClient.h +8 -8
- package/SVF-osx/include/DDA/DDAVFSolver.h +5 -5
- package/SVF-osx/include/DDA/FlowDDA.h +1 -1
- package/SVF-osx/include/Graphs/ConsG.h +6 -6
- package/SVF-osx/include/Graphs/ConsGEdge.h +2 -2
- package/SVF-osx/include/Graphs/ConsGNode.h +1 -1
- package/SVF-osx/include/Graphs/ExternalPAG.h +14 -14
- package/SVF-osx/include/Graphs/GenericGraph.h +1 -1
- package/SVF-osx/include/Graphs/ICFGNode.h +14 -14
- package/SVF-osx/include/Graphs/IRGraph.h +236 -0
- package/SVF-osx/include/Graphs/OfflineConsG.h +1 -1
- package/SVF-osx/include/Graphs/SVFG.h +1 -1
- package/SVF-osx/include/Graphs/SVFGOPT.h +3 -3
- package/SVF-osx/include/Graphs/VFG.h +37 -52
- package/SVF-osx/include/Graphs/VFGNode.h +2 -3
- package/SVF-osx/include/MSSA/MemRegion.h +11 -11
- package/SVF-osx/include/MSSA/MemSSA.h +4 -4
- package/SVF-osx/include/MTA/FSMPTA.h +1 -1
- package/SVF-osx/include/MemoryModel/PAGBuilderFromFile.h +8 -8
- package/SVF-osx/include/MemoryModel/PTAStat.h +31 -31
- package/SVF-osx/include/MemoryModel/PointerAnalysis.h +9 -9
- package/SVF-osx/include/MemoryModel/PointerAnalysisImpl.h +3 -3
- package/SVF-osx/include/MemoryModel/SVFIR.h +526 -235
- package/SVF-osx/include/MemoryModel/SVFStatements.h +872 -0
- package/SVF-osx/include/MemoryModel/SVFVariables.h +842 -0
- package/SVF-osx/include/MemoryModel/SymbolTableInfo.h +346 -55
- package/SVF-osx/include/SABER/SaberSVFGBuilder.h +0 -2
- package/SVF-osx/include/SABER/SrcSnkDDA.h +3 -3
- package/SVF-osx/include/SVF-FE/Graph2Json.h +1 -3
- package/SVF-osx/include/SVF-FE/SVFIRBuilder.h +398 -0
- package/SVF-osx/include/SVF-FE/SymbolTableBuilder.h +0 -1
- package/SVF-osx/include/Util/CFLSolver.h +1 -1
- package/SVF-osx/include/Util/ExtAPI.h +1 -1
- package/SVF-osx/include/Util/IRAnnotator.h +6 -6
- package/SVF-osx/include/Util/Options.h +1 -1
- package/SVF-osx/include/Util/TypeBasedHeapCloning.h +11 -11
- package/SVF-osx/include/WPA/Andersen.h +11 -11
- package/SVF-osx/include/WPA/AndersenSFR.h +4 -4
- package/SVF-osx/include/WPA/FlowSensitive.h +2 -2
- package/SVF-osx/include/WPA/FlowSensitiveTBHC.h +1 -1
- package/SVF-osx/include/WPA/Steensgaard.h +2 -2
- package/SVF-osx/include/WPA/TypeAnalysis.h +1 -1
- package/SVF-osx/include/WPA/VersionedFlowSensitive.h +2 -2
- package/SVF-osx/include/WPA/WPAStat.h +1 -2
- package/package.json +1 -1
|
@@ -33,7 +33,7 @@ public:
|
|
|
33
33
|
static const MDNode *getRawCTirMetadata(const SVFGNode *);
|
|
34
34
|
|
|
35
35
|
/// Constructor
|
|
36
|
-
FlowSensitiveTBHC(
|
|
36
|
+
FlowSensitiveTBHC(SVFIR* _pag, PTATY type = FSTBHC_WPA);
|
|
37
37
|
|
|
38
38
|
/// Destructor
|
|
39
39
|
virtual ~FlowSensitiveTBHC() { };
|
|
@@ -26,13 +26,13 @@ public:
|
|
|
26
26
|
typedef Map<NodeID, Set<NodeID>> NodeToSubsMap;
|
|
27
27
|
|
|
28
28
|
/// Constructor
|
|
29
|
-
Steensgaard(
|
|
29
|
+
Steensgaard(SVFIR* _pag)
|
|
30
30
|
: AndersenBase(_pag, Steensgaard_WPA, true)
|
|
31
31
|
{
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/// Create an singleton instance
|
|
35
|
-
static Steensgaard* createSteensgaard(
|
|
35
|
+
static Steensgaard* createSteensgaard(SVFIR* _pag)
|
|
36
36
|
{
|
|
37
37
|
if(steens==nullptr)
|
|
38
38
|
{
|
|
@@ -47,7 +47,7 @@ public:
|
|
|
47
47
|
static VersionedVar atKey(NodeID, Version);
|
|
48
48
|
|
|
49
49
|
/// Constructor
|
|
50
|
-
VersionedFlowSensitive(
|
|
50
|
+
VersionedFlowSensitive(SVFIR *_pag, PTATY type = VFS_WPA);
|
|
51
51
|
|
|
52
52
|
/// Initialize analysis
|
|
53
53
|
virtual void initialize() override;
|
|
@@ -74,7 +74,7 @@ public:
|
|
|
74
74
|
//@}
|
|
75
75
|
|
|
76
76
|
/// Create single instance of versioned flow-sensitive points-to analysis.
|
|
77
|
-
static VersionedFlowSensitive *createVFSWPA(
|
|
77
|
+
static VersionedFlowSensitive *createVFSWPA(SVFIR *_pag)
|
|
78
78
|
{
|
|
79
79
|
if (vfspta == nullptr)
|
|
80
80
|
{
|
|
Binary file
|
|
Binary file
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
#ifndef DDACLIENT_H_
|
|
12
12
|
#define DDACLIENT_H_
|
|
13
13
|
|
|
14
|
-
#include "
|
|
14
|
+
#include "MemoryModel/SVFIR.h"
|
|
15
15
|
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
16
16
|
#include "Graphs/SVFG.h"
|
|
17
17
|
#include "Util/BasicTypes.h"
|
|
@@ -32,7 +32,7 @@ public:
|
|
|
32
32
|
virtual inline void initialise(SVFModule*) {}
|
|
33
33
|
|
|
34
34
|
/// Collect candidate pointers for query.
|
|
35
|
-
virtual inline OrderedNodeSet& collectCandidateQueries(
|
|
35
|
+
virtual inline OrderedNodeSet& collectCandidateQueries(SVFIR* p)
|
|
36
36
|
{
|
|
37
37
|
setPAG(p);
|
|
38
38
|
if (solveAll)
|
|
@@ -52,8 +52,8 @@ public:
|
|
|
52
52
|
|
|
53
53
|
/// Call back used by DDAVFSolver.
|
|
54
54
|
virtual inline void handleStatement(const SVFGNode*, NodeID) {}
|
|
55
|
-
/// Set
|
|
56
|
-
inline void setPAG(
|
|
55
|
+
/// Set SVFIR graph.
|
|
56
|
+
inline void setPAG(SVFIR* g)
|
|
57
57
|
{
|
|
58
58
|
pag = g;
|
|
59
59
|
}
|
|
@@ -81,11 +81,11 @@ public:
|
|
|
81
81
|
protected:
|
|
82
82
|
void addCandidate(NodeID id)
|
|
83
83
|
{
|
|
84
|
-
if (pag->isValidTopLevelPtr(pag->
|
|
84
|
+
if (pag->isValidTopLevelPtr(pag->getGNode(id)))
|
|
85
85
|
candidateQueries.insert(id);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
SVFIR* pag; ///< SVFIR graph used by current DDA analysis
|
|
89
89
|
SVFModule* module; ///< LLVM module
|
|
90
90
|
NodeID curPtr; ///< current pointer being queried
|
|
91
91
|
OrderedNodeSet candidateQueries; ///< store all candidate pointers to be queried
|
|
@@ -109,7 +109,7 @@ public:
|
|
|
109
109
|
~FunptrDDAClient() {}
|
|
110
110
|
|
|
111
111
|
/// Only collect function pointers as query candidates.
|
|
112
|
-
virtual OrderedNodeSet& collectCandidateQueries(
|
|
112
|
+
virtual OrderedNodeSet& collectCandidateQueries(SVFIR* p);
|
|
113
113
|
virtual void performStat(PointerAnalysis* pta);
|
|
114
114
|
};
|
|
115
115
|
|
|
@@ -128,7 +128,7 @@ public:
|
|
|
128
128
|
~AliasDDAClient() {}
|
|
129
129
|
|
|
130
130
|
/// Only collect function pointers as query candidates.
|
|
131
|
-
virtual OrderedNodeSet& collectCandidateQueries(
|
|
131
|
+
virtual OrderedNodeSet& collectCandidateQueries(SVFIR* pag);
|
|
132
132
|
|
|
133
133
|
virtual void performStat(PointerAnalysis* pta);
|
|
134
134
|
|
|
@@ -29,7 +29,7 @@ public:
|
|
|
29
29
|
typedef SCCDetection<SVFG*> SVFGSCC;
|
|
30
30
|
typedef SCCDetection<PTACallGraph*> CallGraphSCC;
|
|
31
31
|
typedef PTACallGraphEdge::CallInstSet CallInstSet;
|
|
32
|
-
typedef
|
|
32
|
+
typedef SVFIR::CallSiteSet CallSiteSet;
|
|
33
33
|
typedef OrderedSet<DPIm> DPTItemSet;
|
|
34
34
|
typedef OrderedMap<DPIm, CPtSet> DPImToCPtSetMap;
|
|
35
35
|
typedef OrderedMap<DPIm,CVar> DPMToCVarMap;
|
|
@@ -287,7 +287,7 @@ protected:
|
|
|
287
287
|
}
|
|
288
288
|
|
|
289
289
|
/// Build SVFG
|
|
290
|
-
virtual inline void buildSVFG(
|
|
290
|
+
virtual inline void buildSVFG(SVFIR* pag)
|
|
291
291
|
{
|
|
292
292
|
_ander = AndersenWaveDiff::createAndersenWaveDiff(pag);
|
|
293
293
|
_svfg = svfgBuilder.buildPTROnlySVFGWithoutOPT(_ander);
|
|
@@ -473,7 +473,7 @@ protected:
|
|
|
473
473
|
{
|
|
474
474
|
NodeID funPtr = _pag->getFunPtr(cbn);
|
|
475
475
|
DPIm funPtrDpm(dpm);
|
|
476
|
-
funPtrDpm.setLocVar(getSVFG()->getDefSVFGNode(_pag->
|
|
476
|
+
funPtrDpm.setLocVar(getSVFG()->getDefSVFGNode(_pag->getGNode(funPtr)),funPtr);
|
|
477
477
|
findPT(funPtrDpm);
|
|
478
478
|
}
|
|
479
479
|
}
|
|
@@ -486,7 +486,7 @@ protected:
|
|
|
486
486
|
{
|
|
487
487
|
NodeID funPtr = _pag->getFunPtr(*it);
|
|
488
488
|
DPIm funPtrDpm(dpm);
|
|
489
|
-
funPtrDpm.setLocVar(getSVFG()->getDefSVFGNode(_pag->
|
|
489
|
+
funPtrDpm.setLocVar(getSVFG()->getDefSVFGNode(_pag->getGNode(funPtr)),funPtr);
|
|
490
490
|
findPT(funPtrDpm);
|
|
491
491
|
}
|
|
492
492
|
}
|
|
@@ -750,7 +750,7 @@ protected:
|
|
|
750
750
|
}
|
|
751
751
|
|
|
752
752
|
bool outOfBudgetQuery; ///< Whether the current query is out of step limits
|
|
753
|
-
|
|
753
|
+
SVFIR* _pag; ///< SVFIR
|
|
754
754
|
SVFG* _svfg; ///< SVFG
|
|
755
755
|
AndersenWaveDiff* _ander; ///< Andersen's analysis
|
|
756
756
|
NodeBS candidateQueries; ///< candidate pointers;
|
|
@@ -30,7 +30,7 @@ public:
|
|
|
30
30
|
typedef BVDataPTAImpl::CallEdgeMap CallEdgeMap;
|
|
31
31
|
typedef BVDataPTAImpl::FunctionSet FunctionSet;
|
|
32
32
|
/// Constructor
|
|
33
|
-
FlowDDA(
|
|
33
|
+
FlowDDA(SVFIR* _pag, DDAClient* client): BVDataPTAImpl(_pag, PointerAnalysis::FlowS_DDA),
|
|
34
34
|
DDAVFSolver<NodeID,PointsTo,LocDPItem>(),
|
|
35
35
|
_client(client)
|
|
36
36
|
{
|
|
@@ -52,7 +52,7 @@ public:
|
|
|
52
52
|
typedef FIFOWorkList<NodeID> WorkList;
|
|
53
53
|
|
|
54
54
|
protected:
|
|
55
|
-
|
|
55
|
+
SVFIR*pag;
|
|
56
56
|
NodeToRepMap nodeToRepMap;
|
|
57
57
|
NodeToSubsMap nodeToSubsMap;
|
|
58
58
|
WorkList nodesToBeCollapsed;
|
|
@@ -92,7 +92,7 @@ protected:
|
|
|
92
92
|
|
|
93
93
|
public:
|
|
94
94
|
/// Constructor
|
|
95
|
-
ConstraintGraph(
|
|
95
|
+
ConstraintGraph(SVFIR* p): pag(p), edgeIndex(0)
|
|
96
96
|
{
|
|
97
97
|
buildCG();
|
|
98
98
|
}
|
|
@@ -172,7 +172,7 @@ public:
|
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
///Add a
|
|
175
|
+
///Add a SVFIR edge into Edge map
|
|
176
176
|
//@{
|
|
177
177
|
/// Add Address edge
|
|
178
178
|
AddrCGEdge* addAddrCGEdge(NodeID src, NodeID dst);
|
|
@@ -187,7 +187,7 @@ public:
|
|
|
187
187
|
StoreCGEdge* addStoreCGEdge(NodeID src, NodeID dst);
|
|
188
188
|
//@}
|
|
189
189
|
|
|
190
|
-
///Get
|
|
190
|
+
///Get SVFIR edge
|
|
191
191
|
//@{
|
|
192
192
|
/// Get Address edges
|
|
193
193
|
inline ConstraintEdge::ConstraintEdgeSetTy& getAddrCGEdges()
|
|
@@ -296,9 +296,9 @@ public:
|
|
|
296
296
|
return false;
|
|
297
297
|
}
|
|
298
298
|
|
|
299
|
-
/// Wrappers for invoking
|
|
299
|
+
/// Wrappers for invoking SVFIR methods
|
|
300
300
|
//@{
|
|
301
|
-
inline const
|
|
301
|
+
inline const SVFIR::CallSiteToFunPtrMap& getIndirectCallsites() const
|
|
302
302
|
{
|
|
303
303
|
return pag->getIndirectCallsites();
|
|
304
304
|
}
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
#ifndef CONSGEDGE_H_
|
|
31
31
|
#define CONSGEDGE_H_
|
|
32
32
|
|
|
33
|
-
#include "
|
|
33
|
+
#include "MemoryModel/SVFIR.h"
|
|
34
34
|
#include "Util/WorkList.h"
|
|
35
35
|
|
|
36
36
|
#include <map>
|
|
@@ -42,7 +42,7 @@ namespace SVF
|
|
|
42
42
|
class ConstraintNode;
|
|
43
43
|
/*!
|
|
44
44
|
* Self-defined edge for constraint resolution
|
|
45
|
-
* including add/remove/re-target, but all the operations do not affect original
|
|
45
|
+
* including add/remove/re-target, but all the operations do not affect original SVFIR Edges
|
|
46
46
|
*/
|
|
47
47
|
typedef GenericEdge<ConstraintNode> GenericConsEdgeTy;
|
|
48
48
|
class ConstraintEdge : public GenericConsEdgeTy
|
|
@@ -101,7 +101,7 @@ public:
|
|
|
101
101
|
}
|
|
102
102
|
//@}
|
|
103
103
|
|
|
104
|
-
/// Direct and Indirect
|
|
104
|
+
/// Direct and Indirect SVFIR edges
|
|
105
105
|
inline bool isdirectEdge(ConstraintEdge::ConstraintEdgeK kind)
|
|
106
106
|
{
|
|
107
107
|
return (kind == ConstraintEdge::Copy || kind == ConstraintEdge::NormalGep || kind == ConstraintEdge::VariantGep );
|
|
@@ -10,15 +10,15 @@
|
|
|
10
10
|
#ifndef EXTERNALPAG_H_
|
|
11
11
|
#define EXTERNALPAG_H_
|
|
12
12
|
|
|
13
|
-
#include "
|
|
13
|
+
#include "MemoryModel/SVFVariables.h"
|
|
14
14
|
|
|
15
15
|
extern llvm::cl::list<std::string> DumpPAGFunctions;
|
|
16
16
|
|
|
17
17
|
namespace SVF
|
|
18
18
|
{
|
|
19
19
|
|
|
20
|
-
/// Represents the
|
|
21
|
-
/// It's purpose is to be attached to the main
|
|
20
|
+
/// Represents the SVFIR of a function loaded externally (i.e. from file).
|
|
21
|
+
/// It's purpose is to be attached to the main SVFIR (almost) seamlessly.
|
|
22
22
|
class ExternalPAG
|
|
23
23
|
{
|
|
24
24
|
private:
|
|
@@ -28,17 +28,17 @@ private:
|
|
|
28
28
|
functionToExternalPAGEntries;
|
|
29
29
|
static Map<const SVFFunction*, PAGNode *> functionToExternalPAGReturns;
|
|
30
30
|
|
|
31
|
-
/// Name of the function this external
|
|
31
|
+
/// Name of the function this external SVFIR represents.
|
|
32
32
|
std::string functionName;
|
|
33
33
|
|
|
34
|
-
/// Value nodes in this external
|
|
35
|
-
/// because we will rebuild these nodes in the main
|
|
34
|
+
/// Value nodes in this external SVFIR, represented by NodeIDs
|
|
35
|
+
/// because we will rebuild these nodes in the main SVFIR.
|
|
36
36
|
NodeSet valueNodes;
|
|
37
|
-
/// Object nodes in this external
|
|
38
|
-
/// because we will rebuild these nodes in the main
|
|
37
|
+
/// Object nodes in this external SVFIR, represented by NodeIDs
|
|
38
|
+
/// because we will rebuild these nodes in the main SVFIR.
|
|
39
39
|
NodeSet objectNodes;
|
|
40
|
-
/// Edges in this external
|
|
41
|
-
/// we will rebuild these edges in the main
|
|
40
|
+
/// Edges in this external SVFIR, represented by the parts of an Edge because
|
|
41
|
+
/// we will rebuild these edges in the main SVFIR.
|
|
42
42
|
OrderedSet<std::tuple<NodeID, NodeID, std::string, int>> edges;
|
|
43
43
|
|
|
44
44
|
// Special nodes.
|
|
@@ -82,15 +82,15 @@ public:
|
|
|
82
82
|
~ExternalPAG() {}
|
|
83
83
|
|
|
84
84
|
/// Parses command line arguments and attaches external PAGs to main
|
|
85
|
-
///
|
|
85
|
+
/// SVFIR.
|
|
86
86
|
static void initialise(SVFModule* svfModule);
|
|
87
87
|
|
|
88
|
-
/// Connects callsite if a external
|
|
88
|
+
/// Connects callsite if a external SVFIR implementing the relevant function
|
|
89
89
|
/// has been added.
|
|
90
90
|
/// Returns true on success, false otherwise.
|
|
91
91
|
static bool connectCallsiteToExternalPAG(CallSite *cs);
|
|
92
92
|
|
|
93
|
-
/// Whether an external
|
|
93
|
+
/// Whether an external SVFIR implementing function exists.
|
|
94
94
|
static bool hasExternalPAG(const SVFFunction* function);
|
|
95
95
|
|
|
96
96
|
/// Dump individual PAGs of specified functions. Currently to outs().
|
|
@@ -136,7 +136,7 @@ public:
|
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
/// Adds (creates new equivalents) all the nodes and edges of this extpag to
|
|
139
|
-
/// the main
|
|
139
|
+
/// the main SVFIR. function is used as a key for future lookups.
|
|
140
140
|
/// Returns true on success, false otherwise (incl. if it already exists).
|
|
141
141
|
bool addExternalPAG(const SVFFunction* function);
|
|
142
142
|
|
|
@@ -108,7 +108,7 @@ public:
|
|
|
108
108
|
}
|
|
109
109
|
} equalGEdge;
|
|
110
110
|
|
|
111
|
-
inline bool operator==(const GenericEdge<NodeType>* rhs) const
|
|
111
|
+
virtual inline bool operator==(const GenericEdge<NodeType>* rhs) const
|
|
112
112
|
{
|
|
113
113
|
return (rhs->edgeFlag == this->edgeFlag && rhs->getSrcID() == this->getSrcID()
|
|
114
114
|
&& rhs->getDstID() == this->getDstID());
|
|
@@ -41,8 +41,8 @@ class ICFGNode;
|
|
|
41
41
|
class RetBlockNode;
|
|
42
42
|
class CallPE;
|
|
43
43
|
class RetPE;
|
|
44
|
-
class
|
|
45
|
-
class
|
|
44
|
+
class SVFStmt;
|
|
45
|
+
class SVFVar;
|
|
46
46
|
class VFGNode;
|
|
47
47
|
|
|
48
48
|
/*!
|
|
@@ -67,7 +67,7 @@ public:
|
|
|
67
67
|
typedef Set<const CallPE *> CallPESet;
|
|
68
68
|
typedef Set<const RetPE *> RetPESet;
|
|
69
69
|
typedef std::list<const VFGNode*> VFGNodeList;
|
|
70
|
-
typedef std::list<const
|
|
70
|
+
typedef std::list<const SVFStmt*> PAGEdgeList;
|
|
71
71
|
|
|
72
72
|
public:
|
|
73
73
|
/// Constructor
|
|
@@ -113,7 +113,7 @@ public:
|
|
|
113
113
|
|
|
114
114
|
/// Set/Get methods of VFGNodes
|
|
115
115
|
///@{
|
|
116
|
-
inline void addPAGEdge(const
|
|
116
|
+
inline void addPAGEdge(const SVFStmt *edge)
|
|
117
117
|
{
|
|
118
118
|
pagEdges.push_back(edge);
|
|
119
119
|
}
|
|
@@ -252,7 +252,7 @@ class FunEntryBlockNode : public InterBlockNode
|
|
|
252
252
|
{
|
|
253
253
|
|
|
254
254
|
public:
|
|
255
|
-
typedef std::vector<const
|
|
255
|
+
typedef std::vector<const SVFVar *> FormalParmNodeVec;
|
|
256
256
|
private:
|
|
257
257
|
FormalParmNodeVec FPNodes;
|
|
258
258
|
public:
|
|
@@ -271,7 +271,7 @@ public:
|
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
/// Add formal parameters
|
|
274
|
-
inline void addFormalParms(const
|
|
274
|
+
inline void addFormalParms(const SVFVar *fp)
|
|
275
275
|
{
|
|
276
276
|
FPNodes.push_back(fp);
|
|
277
277
|
}
|
|
@@ -310,7 +310,7 @@ class FunExitBlockNode : public InterBlockNode
|
|
|
310
310
|
|
|
311
311
|
private:
|
|
312
312
|
const SVFFunction* fun;
|
|
313
|
-
const
|
|
313
|
+
const SVFVar *formalRet;
|
|
314
314
|
public:
|
|
315
315
|
FunExitBlockNode(NodeID id, const SVFFunction* f);
|
|
316
316
|
|
|
@@ -321,13 +321,13 @@ public:
|
|
|
321
321
|
}
|
|
322
322
|
|
|
323
323
|
/// Return actual return parameter
|
|
324
|
-
inline const
|
|
324
|
+
inline const SVFVar *getFormalRet() const
|
|
325
325
|
{
|
|
326
326
|
return formalRet;
|
|
327
327
|
}
|
|
328
328
|
|
|
329
329
|
/// Add actual return parameter
|
|
330
|
-
inline void addFormalRet(const
|
|
330
|
+
inline void addFormalRet(const SVFVar *fr)
|
|
331
331
|
{
|
|
332
332
|
formalRet = fr;
|
|
333
333
|
}
|
|
@@ -365,7 +365,7 @@ class CallBlockNode : public InterBlockNode
|
|
|
365
365
|
{
|
|
366
366
|
|
|
367
367
|
public:
|
|
368
|
-
typedef std::vector<const
|
|
368
|
+
typedef std::vector<const SVFVar *> ActualParmVFGNodeVec;
|
|
369
369
|
private:
|
|
370
370
|
const Instruction* cs;
|
|
371
371
|
const RetBlockNode* ret;
|
|
@@ -421,7 +421,7 @@ public:
|
|
|
421
421
|
}
|
|
422
422
|
|
|
423
423
|
/// Add actual parameters
|
|
424
|
-
inline void addActualParms(const
|
|
424
|
+
inline void addActualParms(const SVFVar *ap)
|
|
425
425
|
{
|
|
426
426
|
APNodes.push_back(ap);
|
|
427
427
|
}
|
|
@@ -461,7 +461,7 @@ class RetBlockNode : public InterBlockNode
|
|
|
461
461
|
|
|
462
462
|
private:
|
|
463
463
|
const Instruction* cs;
|
|
464
|
-
const
|
|
464
|
+
const SVFVar *actualRet;
|
|
465
465
|
const CallBlockNode* callBlockNode;
|
|
466
466
|
public:
|
|
467
467
|
RetBlockNode(NodeID id, const Instruction* c, CallBlockNode* cb) :
|
|
@@ -482,13 +482,13 @@ public:
|
|
|
482
482
|
return callBlockNode;
|
|
483
483
|
}
|
|
484
484
|
/// Return actual return parameter
|
|
485
|
-
inline const
|
|
485
|
+
inline const SVFVar *getActualRet() const
|
|
486
486
|
{
|
|
487
487
|
return actualRet;
|
|
488
488
|
}
|
|
489
489
|
|
|
490
490
|
/// Add actual return parameter
|
|
491
|
-
inline void addActualRet(const
|
|
491
|
+
inline void addActualRet(const SVFVar *ar)
|
|
492
492
|
{
|
|
493
493
|
actualRet = ar;
|
|
494
494
|
}
|