svf-lib 1.0.769 → 1.0.773
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/Graphs/ICFG.h +5 -3
- package/SVF-linux/include/Graphs/ICFGNode.h +3 -3
- package/SVF-linux/include/MemoryModel/PointerAnalysis.h +0 -3
- package/SVF-linux/include/MemoryModel/SVFStatements.h +5 -0
- 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/Graphs/ICFGNode.h +3 -3
- package/SVF-osx/include/MemoryModel/SVFVariables.h +22 -21
- package/package.json +1 -1
|
Binary file
|
|
@@ -46,6 +46,8 @@ typedef GenericGraph<ICFGNode,ICFGEdge> GenericICFGTy;
|
|
|
46
46
|
class ICFG : public GenericICFGTy
|
|
47
47
|
{
|
|
48
48
|
|
|
49
|
+
friend class ICFGBuilder;
|
|
50
|
+
|
|
49
51
|
public:
|
|
50
52
|
|
|
51
53
|
typedef Map<NodeID, ICFGNode *> ICFGNodeIDToNodeMapTy;
|
|
@@ -109,7 +111,7 @@ public:
|
|
|
109
111
|
/// update ICFG for indirect calls
|
|
110
112
|
void updateCallGraph(PTACallGraph* callgraph);
|
|
111
113
|
|
|
112
|
-
|
|
114
|
+
protected:
|
|
113
115
|
/// Remove a SVFG edge
|
|
114
116
|
inline void removeICFGEdge(ICFGEdge* edge)
|
|
115
117
|
{
|
|
@@ -157,6 +159,7 @@ public:
|
|
|
157
159
|
addGNode(node->getId(),node);
|
|
158
160
|
}
|
|
159
161
|
|
|
162
|
+
public:
|
|
160
163
|
/// Get a basic block ICFGNode
|
|
161
164
|
/// TODO:: need to fix the assertions
|
|
162
165
|
//@{
|
|
@@ -172,11 +175,10 @@ public:
|
|
|
172
175
|
|
|
173
176
|
FunExitBlockNode* getFunExitBlockNode(const SVFFunction* fun);
|
|
174
177
|
|
|
175
|
-
GlobalBlockNode* getGlobalBlockNode() const
|
|
178
|
+
inline GlobalBlockNode* getGlobalBlockNode() const
|
|
176
179
|
{
|
|
177
180
|
return globalBlockNode;
|
|
178
181
|
}
|
|
179
|
-
|
|
180
182
|
//@}
|
|
181
183
|
|
|
182
184
|
private:
|
|
@@ -365,11 +365,11 @@ class CallBlockNode : public InterBlockNode
|
|
|
365
365
|
{
|
|
366
366
|
|
|
367
367
|
public:
|
|
368
|
-
typedef std::vector<const SVFVar *>
|
|
368
|
+
typedef std::vector<const SVFVar *> ActualParmNodeVec;
|
|
369
369
|
private:
|
|
370
370
|
const Instruction* cs;
|
|
371
371
|
const RetBlockNode* ret;
|
|
372
|
-
|
|
372
|
+
ActualParmNodeVec APNodes;
|
|
373
373
|
public:
|
|
374
374
|
CallBlockNode(NodeID id, const Instruction* c) : InterBlockNode(id, FunCallBlock), cs(c), ret(nullptr)
|
|
375
375
|
{
|
|
@@ -415,7 +415,7 @@ public:
|
|
|
415
415
|
}
|
|
416
416
|
|
|
417
417
|
/// Return the set of actual parameters
|
|
418
|
-
inline const
|
|
418
|
+
inline const ActualParmNodeVec &getActualParms() const
|
|
419
419
|
{
|
|
420
420
|
return APNodes;
|
|
421
421
|
}
|
|
@@ -293,9 +293,6 @@ protected:
|
|
|
293
293
|
virtual void validateExpectedFailureTests(std::string fun);
|
|
294
294
|
//@}
|
|
295
295
|
|
|
296
|
-
/// Whether to dump the graph for debugging purpose
|
|
297
|
-
bool dumpGraph();
|
|
298
|
-
|
|
299
296
|
/// Reset all object node as field-sensitive.
|
|
300
297
|
void resetObjFieldSensitive();
|
|
301
298
|
|
|
@@ -753,6 +753,11 @@ public:
|
|
|
753
753
|
void addOpVar(SVFVar* op){
|
|
754
754
|
opVars.push_back(op);
|
|
755
755
|
}
|
|
756
|
+
|
|
757
|
+
/// Return true if this is a phi at the function exit
|
|
758
|
+
/// to receive one or multiple return values of this function
|
|
759
|
+
bool isFunctionRetPhi() const;
|
|
760
|
+
|
|
756
761
|
virtual const std::string toString() const override;
|
|
757
762
|
};
|
|
758
763
|
|
|
Binary file
|
|
Binary file
|
|
@@ -365,11 +365,11 @@ class CallBlockNode : public InterBlockNode
|
|
|
365
365
|
{
|
|
366
366
|
|
|
367
367
|
public:
|
|
368
|
-
typedef std::vector<const SVFVar *>
|
|
368
|
+
typedef std::vector<const SVFVar *> ActualParmNodeVec;
|
|
369
369
|
private:
|
|
370
370
|
const Instruction* cs;
|
|
371
371
|
const RetBlockNode* ret;
|
|
372
|
-
|
|
372
|
+
ActualParmNodeVec APNodes;
|
|
373
373
|
public:
|
|
374
374
|
CallBlockNode(NodeID id, const Instruction* c) : InterBlockNode(id, FunCallBlock), cs(c), ret(nullptr)
|
|
375
375
|
{
|
|
@@ -415,7 +415,7 @@ public:
|
|
|
415
415
|
}
|
|
416
416
|
|
|
417
417
|
/// Return the set of actual parameters
|
|
418
|
-
inline const
|
|
418
|
+
inline const ActualParmNodeVec &getActualParms() const
|
|
419
419
|
{
|
|
420
420
|
return APNodes;
|
|
421
421
|
}
|
|
@@ -45,6 +45,9 @@ class SVFVar;
|
|
|
45
45
|
typedef GenericNode<SVFVar,SVFStmt> GenericPAGNodeTy;
|
|
46
46
|
class SVFVar : public GenericPAGNodeTy
|
|
47
47
|
{
|
|
48
|
+
friend class IRGraph;
|
|
49
|
+
friend class SVFIR;
|
|
50
|
+
friend class VFG;
|
|
48
51
|
|
|
49
52
|
public:
|
|
50
53
|
/// Nine kinds of SVFIR variables
|
|
@@ -162,13 +165,11 @@ public:
|
|
|
162
165
|
{
|
|
163
166
|
return InEdgeKindToSetMap[kind];
|
|
164
167
|
}
|
|
165
|
-
|
|
166
168
|
/// Get outgoing SVFIR statements (edges)
|
|
167
169
|
inline SVFStmt::SVFStmtSetTy& getOutgoingEdges(SVFStmt::PEDGEK kind)
|
|
168
170
|
{
|
|
169
171
|
return OutEdgeKindToSetMap[kind];
|
|
170
172
|
}
|
|
171
|
-
|
|
172
173
|
/// Has incoming SVFIR statements (edges)
|
|
173
174
|
inline bool hasIncomingEdges(SVFStmt::PEDGEK kind) const
|
|
174
175
|
{
|
|
@@ -178,18 +179,16 @@ public:
|
|
|
178
179
|
else
|
|
179
180
|
return false;
|
|
180
181
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
inline bool hasIncomingVariantGepEdge() const
|
|
182
|
+
/// Has outgoing SVFIR statements (edges)
|
|
183
|
+
inline bool hasOutgoingEdges(SVFStmt::PEDGEK kind) const
|
|
184
184
|
{
|
|
185
|
-
SVFStmt::KindToSVFStmtMapTy::const_iterator it =
|
|
186
|
-
if (it !=
|
|
187
|
-
{
|
|
185
|
+
SVFStmt::KindToSVFStmtMapTy::const_iterator it = OutEdgeKindToSetMap.find(kind);
|
|
186
|
+
if (it != OutEdgeKindToSetMap.end())
|
|
188
187
|
return (!it->second.empty());
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
else
|
|
189
|
+
return false;
|
|
191
190
|
}
|
|
192
|
-
|
|
191
|
+
|
|
193
192
|
/// Get incoming SVFStmt iterator
|
|
194
193
|
inline SVFStmt::SVFStmtSetTy::iterator getIncomingEdgesBegin(SVFStmt::PEDGEK kind) const
|
|
195
194
|
{
|
|
@@ -206,16 +205,6 @@ public:
|
|
|
206
205
|
return it->second.end();
|
|
207
206
|
}
|
|
208
207
|
|
|
209
|
-
/// Has outgoing SVFIR statements (edges)
|
|
210
|
-
inline bool hasOutgoingEdges(SVFStmt::PEDGEK kind) const
|
|
211
|
-
{
|
|
212
|
-
SVFStmt::KindToSVFStmtMapTy::const_iterator it = OutEdgeKindToSetMap.find(kind);
|
|
213
|
-
if (it != OutEdgeKindToSetMap.end())
|
|
214
|
-
return (!it->second.empty());
|
|
215
|
-
else
|
|
216
|
-
return false;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
208
|
/// Get outgoing SVFStmt iterator
|
|
220
209
|
inline SVFStmt::SVFStmtSetTy::iterator getOutgoingEdgesBegin(SVFStmt::PEDGEK kind) const
|
|
221
210
|
{
|
|
@@ -233,6 +222,7 @@ public:
|
|
|
233
222
|
}
|
|
234
223
|
//@}
|
|
235
224
|
|
|
225
|
+
private:
|
|
236
226
|
/// add methods of the components
|
|
237
227
|
//@{
|
|
238
228
|
inline void addInEdge(SVFStmt* inEdge)
|
|
@@ -248,7 +238,18 @@ public:
|
|
|
248
238
|
OutEdgeKindToSetMap[kind].insert(outEdge);
|
|
249
239
|
addOutgoingEdge(outEdge);
|
|
250
240
|
}
|
|
241
|
+
/// Has incoming VariantGepEdges
|
|
242
|
+
inline bool hasIncomingVariantGepEdge() const
|
|
243
|
+
{
|
|
244
|
+
SVFStmt::KindToSVFStmtMapTy::const_iterator it = InEdgeKindToSetMap.find(SVFStmt::VariantGep);
|
|
245
|
+
if (it != InEdgeKindToSetMap.end())
|
|
246
|
+
{
|
|
247
|
+
return (!it->second.empty());
|
|
248
|
+
}
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
251
|
|
|
252
|
+
public:
|
|
252
253
|
virtual const std::string toString() const;
|
|
253
254
|
|
|
254
255
|
/// Dump to console for debugging
|