svf-tools 1.0.286 → 1.0.287
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-doxygen/html/html/ConditionalPT_8h.html +2 -0
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +56 -53
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -2
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +50 -50
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +1 -2
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp.html +1 -0
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +11 -11
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/annotated.html +14 -13
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet.html +115 -115
- package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet_1_1CondPtsSetIterator.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1CondStdSet-members.html +27 -26
- package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +56 -21
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +3 -5
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +106 -104
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1SVFGNodeLockSpan.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +9 -9
- package/SVF-doxygen/html/html/classes.html +93 -92
- package/SVF-doxygen/html/html/functions_a.html +1 -1
- package/SVF-doxygen/html/html/functions_c.html +24 -19
- package/SVF-doxygen/html/html/functions_f.html +6 -6
- package/SVF-doxygen/html/html/functions_func.html +1 -1
- package/SVF-doxygen/html/html/functions_func_c.html +20 -17
- package/SVF-doxygen/html/html/functions_func_g.html +2 -2
- package/SVF-doxygen/html/html/functions_func_o.html +2 -1
- package/SVF-doxygen/html/html/functions_g.html +3 -3
- package/SVF-doxygen/html/html/functions_i.html +3 -3
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_n.html +1 -1
- package/SVF-doxygen/html/html/functions_o.html +5 -4
- package/SVF-doxygen/html/html/functions_p.html +14 -16
- package/SVF-doxygen/html/html/functions_r.html +3 -7
- package/SVF-doxygen/html/html/functions_s.html +10 -12
- package/SVF-doxygen/html/html/functions_type_n.html +1 -1
- package/SVF-doxygen/html/html/functions_u.html +3 -3
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_c.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
- package/SVF-doxygen/html/html/hierarchy.html +165 -164
- package/SVF-doxygen/html/html/search/all_1.js +1 -1
- package/SVF-doxygen/html/html/search/all_10.js +10 -10
- package/SVF-doxygen/html/html/search/all_12.js +1 -1
- package/SVF-doxygen/html/html/search/all_13.js +7 -7
- package/SVF-doxygen/html/html/search/all_14.js +3 -3
- package/SVF-doxygen/html/html/search/all_15.js +2 -2
- package/SVF-doxygen/html/html/search/all_16.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +3 -2
- package/SVF-doxygen/html/html/search/all_6.js +2 -2
- package/SVF-doxygen/html/html/search/all_7.js +2 -2
- package/SVF-doxygen/html/html/search/all_8.js +1 -0
- package/SVF-doxygen/html/html/search/all_9.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +5 -5
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/classes_7.js +1 -0
- package/SVF-doxygen/html/html/search/functions_0.js +1 -1
- package/SVF-doxygen/html/html/search/functions_2.js +2 -1
- package/SVF-doxygen/html/html/search/functions_6.js +1 -1
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +2 -2
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_3.js +1 -1
- package/SVF-doxygen/html/html/search/variables_7.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4.html +131 -0
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondVar_3_01Cond_01_4_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SVFGNodeLockSpan_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01const_01SVF_1_1CondVar_3_01Cond_01_4_01_4.html +3 -3
- package/include/DDA/DDAVFSolver.h +1 -1
- package/include/Graphs/SVFGEdge.h +3 -3
- package/include/Graphs/SVFGNode.h +2 -2
- package/include/MTA/FSMPTA.h +1 -0
- package/include/MemoryModel/ConditionalPT.h +21 -5
- package/include/SABER/SaberSVFGBuilder.h +3 -3
- package/lib/Graphs/SVFGStat.cpp +1 -1
- package/lib/Graphs/ThreadCallGraph.cpp +4 -4
- package/lib/MTA/FSMPTA.cpp +7 -7
- package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
- package/lib/SABER/SaberSVFGBuilder.cpp +2 -1
- package/lib/WPA/FlowSensitive.cpp +2 -2
- package/lib/WPA/FlowSensitiveTBHC.cpp +2 -2
- package/lib/WPA/VersionedFlowSensitive.cpp +1 -1
- package/package.json +1 -1
|
@@ -44,7 +44,7 @@ class SaberSVFGBuilder : public SVFGBuilder
|
|
|
44
44
|
|
|
45
45
|
public:
|
|
46
46
|
typedef Set<const SVFGNode*> SVFGNodeSet;
|
|
47
|
-
typedef Map<NodeID,
|
|
47
|
+
typedef Map<NodeID, PointsTo> NodeToPTSSMap;
|
|
48
48
|
typedef FIFOWorkList<NodeID> WorkList;
|
|
49
49
|
|
|
50
50
|
/// Constructor
|
|
@@ -94,9 +94,9 @@ private:
|
|
|
94
94
|
bool accessGlobal(BVDataPTAImpl* pta,const PAGNode* pagNode);
|
|
95
95
|
|
|
96
96
|
/// Collect objects along points-to chains
|
|
97
|
-
|
|
97
|
+
PointsTo& CollectPtsChain(BVDataPTAImpl* pta,NodeID id, NodeToPTSSMap& cachedPtsMap);
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
PointsTo globs;
|
|
100
100
|
/// Store all global SVFG nodes
|
|
101
101
|
SVFGNodeSet globSVFGNodes;
|
|
102
102
|
};
|
package/lib/Graphs/SVFGStat.cpp
CHANGED
|
@@ -321,7 +321,7 @@ void SVFGStat::calculateNodeDegrees(SVFGNode* node, NodeSet& nodeHasIndInEdge, N
|
|
|
321
321
|
nodeHasIndInEdge.insert(node->getId());
|
|
322
322
|
// get edge's weight
|
|
323
323
|
// TODO: try a new method to calculate weight.
|
|
324
|
-
const
|
|
324
|
+
const NodeBS& cpts = edge->getPointsTo();
|
|
325
325
|
avgWeight += cpts.count();
|
|
326
326
|
totalIndEdgeLabels += cpts.count();
|
|
327
327
|
}
|
|
@@ -74,8 +74,8 @@ void ThreadCallGraph::updateCallGraph(PointerAnalysis* pta)
|
|
|
74
74
|
if(SVFUtil::dyn_cast<Function>(forkedval)==nullptr)
|
|
75
75
|
{
|
|
76
76
|
PAG* pag = pta->getPAG();
|
|
77
|
-
const
|
|
78
|
-
for (
|
|
77
|
+
const NodeBS targets = pta->getPts(pag->getValueNode(forkedval));
|
|
78
|
+
for (NodeBS::iterator ii = targets.begin(), ie = targets.end(); ii != ie; ii++)
|
|
79
79
|
{
|
|
80
80
|
if(ObjPN* objPN = SVFUtil::dyn_cast<ObjPN>(pag->getPAGNode(*ii)))
|
|
81
81
|
{
|
|
@@ -98,8 +98,8 @@ void ThreadCallGraph::updateCallGraph(PointerAnalysis* pta)
|
|
|
98
98
|
if(SVFUtil::dyn_cast<Function>(forkedval)==nullptr)
|
|
99
99
|
{
|
|
100
100
|
PAG* pag = pta->getPAG();
|
|
101
|
-
const
|
|
102
|
-
for (
|
|
101
|
+
const NodeBS targets = pta->getPts(pag->getValueNode(forkedval));
|
|
102
|
+
for (NodeBS::iterator ii = targets.begin(), ie = targets.end(); ii != ie; ii++)
|
|
103
103
|
{
|
|
104
104
|
if(ObjPN* objPN = SVFUtil::dyn_cast<ObjPN>(pag->getPAGNode(*ii)))
|
|
105
105
|
{
|
package/lib/MTA/FSMPTA.cpp
CHANGED
|
@@ -141,12 +141,12 @@ void MTASVFGBuilder::performRemovingMHPEdges()
|
|
|
141
141
|
if (edge->isIndirectVFGEdge() && (edge->getDstNode()==n2))
|
|
142
142
|
{
|
|
143
143
|
IndirectSVFGEdge* e = SVFUtil::cast<IndirectSVFGEdge>(edge);
|
|
144
|
-
const
|
|
145
|
-
for (
|
|
144
|
+
const NodeBS& pts = e->getPointsTo();
|
|
145
|
+
for (PointsTo::iterator o = remove_pts.begin(), eo = remove_pts.end(); o != eo; ++o)
|
|
146
146
|
{
|
|
147
|
-
if (const_cast<
|
|
147
|
+
if (const_cast<NodeBS&>(pts).test(*o))
|
|
148
148
|
{
|
|
149
|
-
const_cast<
|
|
149
|
+
const_cast<NodeBS&>(pts).reset(*o);
|
|
150
150
|
MTASVFGBuilder::numOfRemovedPTS ++;
|
|
151
151
|
}
|
|
152
152
|
}
|
|
@@ -406,7 +406,7 @@ MTASVFGBuilder::SVFGNodeIDSet MTASVFGBuilder::getSuccNodes(const StmtSVFGNode* n
|
|
|
406
406
|
if (edge->isIndirectVFGEdge())
|
|
407
407
|
{
|
|
408
408
|
IndirectSVFGEdge* e = SVFUtil::cast<IndirectSVFGEdge>(edge);
|
|
409
|
-
|
|
409
|
+
NodeBS pts = e->getPointsTo();
|
|
410
410
|
if(pts.test(o))
|
|
411
411
|
worklist.insert(edge->getDstNode());
|
|
412
412
|
}
|
|
@@ -427,7 +427,7 @@ MTASVFGBuilder::SVFGNodeIDSet MTASVFGBuilder::getSuccNodes(const StmtSVFGNode* n
|
|
|
427
427
|
if (edge->isIndirectVFGEdge() && visited.find(edge->getDstNode()) == visited.end())
|
|
428
428
|
{
|
|
429
429
|
IndirectSVFGEdge* e = SVFUtil::cast<IndirectSVFGEdge>(edge);
|
|
430
|
-
|
|
430
|
+
NodeBS pts = e->getPointsTo();
|
|
431
431
|
if(pts.test(o))
|
|
432
432
|
worklist.insert(edge->getDstNode());
|
|
433
433
|
}
|
|
@@ -649,7 +649,7 @@ void MTASVFGBuilder::readPrecision()
|
|
|
649
649
|
const StmtSVFGNode* n2 = SVFUtil::cast<StmtSVFGNode>(edge->getSrcNode());
|
|
650
650
|
|
|
651
651
|
IndirectSVFGEdge* e = SVFUtil::cast<IndirectSVFGEdge>(edge);
|
|
652
|
-
|
|
652
|
+
NodeBS pts = e->getPointsTo();
|
|
653
653
|
PointsTo remove_pts;
|
|
654
654
|
|
|
655
655
|
for (NodeBS::iterator o = pts.begin(), eo = pts.end(); o != eo; ++o)
|
|
@@ -345,7 +345,7 @@ void PointerAnalysis::dumpPts(NodeID ptr, const PointsTo& pts)
|
|
|
345
345
|
|
|
346
346
|
outs() << "";
|
|
347
347
|
|
|
348
|
-
for (
|
|
348
|
+
for (PointsTo::iterator it = pts.begin(), eit = pts.end(); it != eit; ++it)
|
|
349
349
|
{
|
|
350
350
|
const PAGNode* node = pag->getPAGNode(*it);
|
|
351
351
|
if(SVFUtil::isa<ObjPN>(node) == false)
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
#include "SABER/SaberSVFGBuilder.h"
|
|
31
31
|
#include "SABER/SaberCheckerAPI.h"
|
|
32
|
+
#include "MemoryModel/PointerAnalysisImpl.h"
|
|
32
33
|
#include "Graphs/SVFG.h"
|
|
33
34
|
|
|
34
35
|
using namespace SVF;
|
|
@@ -97,7 +98,7 @@ void SaberSVFGBuilder::collectGlobals(BVDataPTAImpl* pta)
|
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
|
|
100
|
-
|
|
101
|
+
PointsTo& SaberSVFGBuilder::CollectPtsChain(BVDataPTAImpl* pta,NodeID id, NodeToPTSSMap& cachedPtsMap)
|
|
101
102
|
{
|
|
102
103
|
PAG* pag = svfg->getPAG();
|
|
103
104
|
|
|
@@ -326,7 +326,7 @@ bool FlowSensitive::propAlongIndirectEdge(const IndirectSVFGEdge* edge)
|
|
|
326
326
|
|
|
327
327
|
// Get points-to targets may be used by next SVFG node.
|
|
328
328
|
// Propagate points-to set for node used in dst.
|
|
329
|
-
const
|
|
329
|
+
const NodeBS& pts = edge->getPointsTo();
|
|
330
330
|
for (PointsTo::iterator ptdIt = pts.begin(), ptdEit = pts.end(); ptdIt != ptdEit; ++ptdIt)
|
|
331
331
|
{
|
|
332
332
|
NodeID ptd = *ptdIt;
|
|
@@ -703,7 +703,7 @@ void FlowSensitive::updateConnectedNodes(const SVFGEdgeSetTy& edges)
|
|
|
703
703
|
|
|
704
704
|
SVFGNode* srcNode = edge->getSrcNode();
|
|
705
705
|
|
|
706
|
-
const
|
|
706
|
+
const NodeBS& pts = SVFUtil::cast<IndirectSVFGEdge>(edge)->getPointsTo();
|
|
707
707
|
for (PointsTo::iterator ptdIt = pts.begin(), ptdEit = pts.end(); ptdIt != ptdEit; ++ptdIt)
|
|
708
708
|
{
|
|
709
709
|
NodeID ptd = *ptdIt;
|
|
@@ -96,11 +96,11 @@ bool FlowSensitiveTBHC::propAlongIndirectEdge(const IndirectSVFGEdge* edge)
|
|
|
96
96
|
|
|
97
97
|
// Get points-to targets may be used by next SVFG node.
|
|
98
98
|
// Propagate points-to set for node used in dst.
|
|
99
|
-
const
|
|
99
|
+
const NodeBS & pts = edge->getPointsTo();
|
|
100
100
|
|
|
101
101
|
// Since the base Andersen's analysis does NOT perform type-based heap cloning,
|
|
102
102
|
// it uses only the base objects; we want to account for clones too.
|
|
103
|
-
|
|
103
|
+
NodeBS edgePtsAndClones;
|
|
104
104
|
|
|
105
105
|
// TODO: the conditional bool may be unnecessary.
|
|
106
106
|
// Adding all clones is redundant, and introduces too many calls to propVarPts...
|
|
@@ -391,7 +391,7 @@ void VersionedFlowSensitive::updateConnectedNodes(const SVFGEdgeSetTy& newEdges)
|
|
|
391
391
|
const IndirectSVFGEdge *ie = SVFUtil::dyn_cast<IndirectSVFGEdge>(e);
|
|
392
392
|
assert(ie != nullptr && "VFS::updateConnectedNodes: given direct edge?");
|
|
393
393
|
|
|
394
|
-
const
|
|
394
|
+
const NodeBS &ept = ie->getPointsTo();
|
|
395
395
|
// For every o, such that src --o--> dst, we need to set up reliance (and propagate).
|
|
396
396
|
for (const NodeID o : ept)
|
|
397
397
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.287",
|
|
4
4
|
"description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|