svf-tools 1.0.604 → 1.0.605
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/AndersenSFR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Casting_8h.html +3 -0
- package/SVF-doxygen/html/html/Casting_8h_source.html +22 -22
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +82 -74
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +9 -9
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +27 -21
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +18 -18
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +33 -38
- package/SVF-doxygen/html/html/MHP_8h_source.html +22 -22
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +12 -11
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +11 -11
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +8 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CFLStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +228 -220
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +64 -58
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +30 -38
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +67 -83
- package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +53 -53
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +46 -33
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +8 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFCFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +1 -1
- package/SVF-doxygen/html/html/include_2MTA_2MTAResultValidator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +7 -7
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +50 -17
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +2 -2
- package/SVF-doxygen/html/html/namespacemembers_func_i.html +7 -7
- package/SVF-doxygen/html/html/namespacemembers_i.html +8 -8
- package/SVF-doxygen/html/html/search/all_9.js +1 -1
- package/SVF-doxygen/html/html/search/functions_8.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__convert__val.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html +4 -4
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__wrap.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__simple__type.html +2 -2
- package/SVF-doxygen/html/html/tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/include/DDA/DDAVFSolver.h +4 -8
- package/include/Graphs/SVFGOPT.h +2 -2
- package/include/MTA/MTAResultValidator.h +1 -1
- package/include/Util/Casting.h +7 -0
- package/lib/CFL/CFLStat.cpp +1 -1
- package/lib/DDA/ContextDDA.cpp +1 -1
- package/lib/Graphs/ConsG.cpp +2 -2
- package/lib/Graphs/SVFGOPT.cpp +15 -17
- package/lib/MTA/FSMPTA.cpp +7 -6
- package/lib/MTA/LockAnalysis.cpp +1 -1
- package/lib/MTA/MHP.cpp +215 -227
- package/lib/MemoryModel/LocationSet.cpp +1 -1
- package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
- package/lib/SABER/SaberSVFGBuilder.cpp +1 -1
- package/lib/SABER/SrcSnkDDA.cpp +3 -3
- package/lib/SVF-LLVM/LLVMModule.cpp +1 -1
- package/lib/SVF-LLVM/LLVMUtil.cpp +1 -1
- package/lib/SVF-LLVM/SVFIRBuilder.cpp +4 -4
- package/lib/SVF-LLVM/SymbolTableBuilder.cpp +3 -2
- package/lib/SVFIR/SymbolTableInfo.cpp +1 -1
- package/lib/WPA/AndersenSFR.cpp +1 -1
- package/lib/WPA/FlowSensitive.cpp +23 -22
- package/package.json +1 -1
|
@@ -63,7 +63,7 @@ bool LocationSet::isConstantOffset() const
|
|
|
63
63
|
u32_t LocationSet::getElementNum(const SVFType* type) const
|
|
64
64
|
{
|
|
65
65
|
|
|
66
|
-
if(SVFUtil::isa<SVFArrayType
|
|
66
|
+
if (SVFUtil::isa<SVFArrayType, SVFStructType>(type))
|
|
67
67
|
{
|
|
68
68
|
return SymbolTableInfo::SymbolInfo()->getNumOfFlattenElements(type);
|
|
69
69
|
}
|
|
@@ -238,7 +238,7 @@ void PointerAnalysis::dumpAllTypes()
|
|
|
238
238
|
nIter != this->getAllValidPtrs().end(); ++nIter)
|
|
239
239
|
{
|
|
240
240
|
const PAGNode* node = getPAG()->getGNode(*nIter);
|
|
241
|
-
if (SVFUtil::isa<DummyObjVar
|
|
241
|
+
if (SVFUtil::isa<DummyObjVar, DummyValVar>(node))
|
|
242
242
|
continue;
|
|
243
243
|
|
|
244
244
|
outs() << "##<" << node->getValue()->getName() << "> ";
|
|
@@ -70,7 +70,7 @@ void SaberSVFGBuilder::collectGlobals(BVDataPTAImpl* pta)
|
|
|
70
70
|
for(SVFIR::iterator it = pag->begin(), eit = pag->end(); it!=eit; it++)
|
|
71
71
|
{
|
|
72
72
|
PAGNode* pagNode = it->second;
|
|
73
|
-
if(SVFUtil::isa<DummyValVar
|
|
73
|
+
if (SVFUtil::isa<DummyValVar, DummyObjVar>(pagNode))
|
|
74
74
|
continue;
|
|
75
75
|
|
|
76
76
|
if(GepObjVar* gepobj = SVFUtil::dyn_cast<GepObjVar>(pagNode))
|
package/lib/SABER/SrcSnkDDA.cpp
CHANGED
|
@@ -160,9 +160,9 @@ bool SrcSnkDDA::isInAWrapper(const SVFGNode* src, CallSiteSet& csIdSet)
|
|
|
160
160
|
const SVFGNode* succ = edge->getDstNode();
|
|
161
161
|
if(SVFUtil::isa<IntraDirSVFGEdge>(edge))
|
|
162
162
|
{
|
|
163
|
-
if (SVFUtil::isa<CopySVFGNode
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
if (SVFUtil::isa<CopySVFGNode, GepSVFGNode, PHISVFGNode,
|
|
164
|
+
FormalRetSVFGNode, ActualRetSVFGNode,
|
|
165
|
+
StoreSVFGNode>(succ))
|
|
166
166
|
{
|
|
167
167
|
worklist.push(succ);
|
|
168
168
|
}
|
|
@@ -1097,7 +1097,7 @@ StInfo* LLVMModuleSet::collectStructInfo(const StructType *sty)
|
|
|
1097
1097
|
/// offset with int_32 (s32_t) is large enough and will not cause overflow
|
|
1098
1098
|
stinfo->addFldWithType(nf, getSVFType(et), strideOffset);
|
|
1099
1099
|
|
|
1100
|
-
if (SVFUtil::isa<StructType
|
|
1100
|
+
if (SVFUtil::isa<StructType, ArrayType>(et))
|
|
1101
1101
|
{
|
|
1102
1102
|
StInfo * subStinfo = collectTypeInfo(et);
|
|
1103
1103
|
u32_t nfE = subStinfo->getNumOfFlattenFields();
|
|
@@ -50,7 +50,7 @@ bool LLVMUtil::isObject(const Value* ref)
|
|
|
50
50
|
createobj = true;
|
|
51
51
|
if (SVFUtil::isa<GlobalVariable>(ref))
|
|
52
52
|
createobj = true;
|
|
53
|
-
if (SVFUtil::isa<Function
|
|
53
|
+
if (SVFUtil::isa<Function, AllocaInst>(ref))
|
|
54
54
|
createobj = true;
|
|
55
55
|
|
|
56
56
|
return createobj;
|
|
@@ -482,7 +482,7 @@ void SVFIRBuilder::InitialGlobal(const GlobalVariable *gvar, Constant *C,
|
|
|
482
482
|
setCurrentLocation(gvar, nullptr);
|
|
483
483
|
NodeID field = getGlobalVarField(gvar, offset, LLVMModuleSet::getLLVMModuleSet()->getSVFType(C->getType()));
|
|
484
484
|
|
|
485
|
-
if (SVFUtil::isa<GlobalVariable
|
|
485
|
+
if (SVFUtil::isa<GlobalVariable, Function>(C))
|
|
486
486
|
{
|
|
487
487
|
setCurrentLocation(C, nullptr);
|
|
488
488
|
addStoreEdge(src, field);
|
|
@@ -511,7 +511,7 @@ void SVFIRBuilder::InitialGlobal(const GlobalVariable *gvar, Constant *C,
|
|
|
511
511
|
addCopyEdge(pag->getNullPtr(), src);
|
|
512
512
|
}
|
|
513
513
|
}
|
|
514
|
-
else if (SVFUtil::isa<ConstantArray
|
|
514
|
+
else if (SVFUtil::isa<ConstantArray, ConstantStruct>(C))
|
|
515
515
|
{
|
|
516
516
|
if(cppUtil::isValVtbl(gvar) && !Options::VtableInSVFIR)
|
|
517
517
|
return;
|
|
@@ -536,7 +536,7 @@ void SVFIRBuilder::InitialGlobal(const GlobalVariable *gvar, Constant *C,
|
|
|
536
536
|
}
|
|
537
537
|
else
|
|
538
538
|
{
|
|
539
|
-
assert((SVFUtil::isa<ConstantAggregateZero
|
|
539
|
+
assert((SVFUtil::isa<ConstantAggregateZero, UndefValue>(data)) && "Single value type data should have been handled!");
|
|
540
540
|
}
|
|
541
541
|
}
|
|
542
542
|
}
|
|
@@ -1588,7 +1588,7 @@ NodeID SVFIRBuilder::getGepValVar(const Value* val, const LocationSet& ls, const
|
|
|
1588
1588
|
* 1. Instruction
|
|
1589
1589
|
* 2. GlobalVariable
|
|
1590
1590
|
*/
|
|
1591
|
-
assert((SVFUtil::isa<SVFInstruction
|
|
1591
|
+
assert((SVFUtil::isa<SVFInstruction, SVFGlobalValue>(curVal)) && "curVal not an instruction or a globalvariable?");
|
|
1592
1592
|
|
|
1593
1593
|
// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program
|
|
1594
1594
|
// We preserve the current BB information to restore it after creating the gepNode
|
|
@@ -526,7 +526,8 @@ void SymbolTableBuilder::handleGlobalInitializerCE(const Constant *C)
|
|
|
526
526
|
}
|
|
527
527
|
else
|
|
528
528
|
{
|
|
529
|
-
assert((SVFUtil::isa<ConstantAggregateZero
|
|
529
|
+
assert((SVFUtil::isa<ConstantAggregateZero, UndefValue>(data)) &&
|
|
530
|
+
"Single value type data should have been handled!");
|
|
530
531
|
}
|
|
531
532
|
}
|
|
532
533
|
}
|
|
@@ -737,7 +738,7 @@ u32_t SymbolTableBuilder::getObjSize(const Type* ety)
|
|
|
737
738
|
{
|
|
738
739
|
assert(ety && "type is null?");
|
|
739
740
|
u32_t numOfFields = 1;
|
|
740
|
-
if (SVFUtil::isa<StructType
|
|
741
|
+
if (SVFUtil::isa<StructType, ArrayType>(ety))
|
|
741
742
|
{
|
|
742
743
|
numOfFields = getNumOfFlattenElements(ety);
|
|
743
744
|
}
|
|
@@ -373,7 +373,7 @@ bool ObjTypeInfo::isNonPtrFieldObj(const LocationSet& ls)
|
|
|
373
373
|
|
|
374
374
|
const SVFType* ety = getType();
|
|
375
375
|
|
|
376
|
-
if (SVFUtil::isa<SVFStructType
|
|
376
|
+
if (SVFUtil::isa<SVFStructType, SVFArrayType>(ety))
|
|
377
377
|
{
|
|
378
378
|
u32_t sz = 0;
|
|
379
379
|
if(Options::ModelArrays)
|
package/lib/WPA/AndersenSFR.cpp
CHANGED
|
@@ -136,7 +136,7 @@ void AndersenSFR::fieldExpand(NodeSet& initials, s32_t offset, NodeBS& strides,
|
|
|
136
136
|
s32_t initOffset;
|
|
137
137
|
if (GepObjVar *gepNode = SVFUtil::dyn_cast<GepObjVar>(initPN))
|
|
138
138
|
initOffset = gepNode->getConstantFieldIdx();
|
|
139
|
-
else if (SVFUtil::isa<FIObjVar
|
|
139
|
+
else if (SVFUtil::isa<FIObjVar, DummyObjVar>(initPN))
|
|
140
140
|
initOffset = 0;
|
|
141
141
|
else
|
|
142
142
|
{
|
|
@@ -192,61 +192,63 @@ bool FlowSensitive::processSVFGNode(SVFGNode* node)
|
|
|
192
192
|
{
|
|
193
193
|
double start = stat->getClk();
|
|
194
194
|
bool changed = false;
|
|
195
|
-
if(AddrSVFGNode* addr = SVFUtil::dyn_cast<AddrSVFGNode>(node))
|
|
195
|
+
if (AddrSVFGNode* addr = SVFUtil::dyn_cast<AddrSVFGNode>(node))
|
|
196
196
|
{
|
|
197
197
|
numOfProcessedAddr++;
|
|
198
|
-
if(processAddr(addr))
|
|
198
|
+
if (processAddr(addr))
|
|
199
199
|
changed = true;
|
|
200
200
|
}
|
|
201
|
-
else if(CopySVFGNode* copy = SVFUtil::dyn_cast<CopySVFGNode>(node))
|
|
201
|
+
else if (CopySVFGNode* copy = SVFUtil::dyn_cast<CopySVFGNode>(node))
|
|
202
202
|
{
|
|
203
203
|
numOfProcessedCopy++;
|
|
204
|
-
if(processCopy(copy))
|
|
204
|
+
if (processCopy(copy))
|
|
205
205
|
changed = true;
|
|
206
206
|
}
|
|
207
|
-
else if(GepSVFGNode* gep = SVFUtil::dyn_cast<GepSVFGNode>(node))
|
|
207
|
+
else if (GepSVFGNode* gep = SVFUtil::dyn_cast<GepSVFGNode>(node))
|
|
208
208
|
{
|
|
209
209
|
numOfProcessedGep++;
|
|
210
210
|
if(processGep(gep))
|
|
211
211
|
changed = true;
|
|
212
212
|
}
|
|
213
|
-
else if(LoadSVFGNode* load = SVFUtil::dyn_cast<LoadSVFGNode>(node))
|
|
213
|
+
else if (LoadSVFGNode* load = SVFUtil::dyn_cast<LoadSVFGNode>(node))
|
|
214
214
|
{
|
|
215
215
|
numOfProcessedLoad++;
|
|
216
216
|
if(processLoad(load))
|
|
217
217
|
changed = true;
|
|
218
218
|
}
|
|
219
|
-
else if(StoreSVFGNode* store = SVFUtil::dyn_cast<StoreSVFGNode>(node))
|
|
219
|
+
else if (StoreSVFGNode* store = SVFUtil::dyn_cast<StoreSVFGNode>(node))
|
|
220
220
|
{
|
|
221
221
|
numOfProcessedStore++;
|
|
222
|
-
if(processStore(store))
|
|
222
|
+
if (processStore(store))
|
|
223
223
|
changed = true;
|
|
224
224
|
}
|
|
225
|
-
else if(PHISVFGNode* phi = SVFUtil::dyn_cast<PHISVFGNode>(node))
|
|
225
|
+
else if (PHISVFGNode* phi = SVFUtil::dyn_cast<PHISVFGNode>(node))
|
|
226
226
|
{
|
|
227
227
|
numOfProcessedPhi++;
|
|
228
228
|
if (processPhi(phi))
|
|
229
229
|
changed = true;
|
|
230
230
|
}
|
|
231
|
-
else if(SVFUtil::isa<MSSAPHISVFGNode
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
else if (SVFUtil::isa<MSSAPHISVFGNode, FormalINSVFGNode,
|
|
232
|
+
FormalOUTSVFGNode, ActualINSVFGNode,
|
|
233
|
+
ActualOUTSVFGNode>(node))
|
|
234
234
|
{
|
|
235
235
|
numOfProcessedMSSANode++;
|
|
236
236
|
changed = true;
|
|
237
237
|
}
|
|
238
|
-
else if(SVFUtil::isa<ActualParmSVFGNode
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
else if (SVFUtil::isa<ActualParmSVFGNode, FormalParmSVFGNode,
|
|
239
|
+
ActualRetSVFGNode, FormalRetSVFGNode,
|
|
240
|
+
NullPtrSVFGNode>(node))
|
|
241
241
|
{
|
|
242
242
|
changed = true;
|
|
243
243
|
}
|
|
244
|
-
else if(SVFUtil::isa<CmpVFGNode
|
|
244
|
+
else if (SVFUtil::isa<CmpVFGNode, BinaryOPVFGNode>(node) ||
|
|
245
|
+
SVFUtil::dyn_cast<UnaryOPVFGNode>(node))
|
|
245
246
|
{
|
|
246
|
-
|
|
247
247
|
}
|
|
248
248
|
else
|
|
249
|
+
{
|
|
249
250
|
assert(false && "unexpected kind of SVFG nodes");
|
|
251
|
+
}
|
|
250
252
|
|
|
251
253
|
double end = stat->getClk();
|
|
252
254
|
processTime += (end - start) / TIMEINTERVAL;
|
|
@@ -710,10 +712,8 @@ void FlowSensitive::connectCallerAndCallee(const CallEdgeMap& newEdges, SVFGEdge
|
|
|
710
712
|
*/
|
|
711
713
|
void FlowSensitive::updateConnectedNodes(const SVFGEdgeSetTy& edges)
|
|
712
714
|
{
|
|
713
|
-
for (
|
|
714
|
-
it != eit; ++it)
|
|
715
|
+
for (const SVFGEdge* edge : edges)
|
|
715
716
|
{
|
|
716
|
-
const SVFGEdge* edge = *it;
|
|
717
717
|
SVFGNode* dstNode = edge->getDstNode();
|
|
718
718
|
if (SVFUtil::isa<PHISVFGNode>(dstNode))
|
|
719
719
|
{
|
|
@@ -721,7 +721,7 @@ void FlowSensitive::updateConnectedNodes(const SVFGEdgeSetTy& edges)
|
|
|
721
721
|
/// node in next iteration
|
|
722
722
|
pushIntoWorklist(dstNode->getId());
|
|
723
723
|
}
|
|
724
|
-
else if (SVFUtil::isa<FormalINSVFGNode
|
|
724
|
+
else if (SVFUtil::isa<FormalINSVFGNode, ActualOUTSVFGNode>(dstNode))
|
|
725
725
|
{
|
|
726
726
|
/// If this is a formal-in or actual-out node, we need to propagate points-to
|
|
727
727
|
/// information from its predecessor node.
|
|
@@ -778,7 +778,8 @@ bool FlowSensitive::propVarPtsAfterCGUpdated(NodeID var, const SVFGNode* src, co
|
|
|
778
778
|
void FlowSensitive::cluster(void)
|
|
779
779
|
{
|
|
780
780
|
std::vector<std::pair<unsigned, unsigned>> keys;
|
|
781
|
-
for (
|
|
781
|
+
for (const auto& pair : *pag)
|
|
782
|
+
keys.emplace_back(pair.first, 1);
|
|
782
783
|
|
|
783
784
|
PointsTo::MappingPtr nodeMapping =
|
|
784
785
|
std::make_shared<std::vector<NodeID>>(NodeIDAllocator::Clusterer::cluster(ander, keys, candidateMappings, "aux-ander"));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.605",
|
|
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": {
|