svf-tools 1.0.368 → 1.0.372

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.
Files changed (142) hide show
  1. package/Dockerfile +1 -1
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +5 -5
  4. package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
  5. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
  7. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +2 -2
  10. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
  11. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +9 -7
  12. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +4 -4
  13. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +51 -41
  14. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +2 -2
  15. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +4 -4
  16. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +22 -19
  17. package/SVF-doxygen/html/html/ICFG_8h_source.html +6 -5
  18. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
  19. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +2 -2
  24. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +10 -6
  25. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +40 -40
  26. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +40 -40
  27. package/SVF-doxygen/html/html/SVFIR_8h_source.html +38 -38
  28. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +73 -75
  30. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/VFGNode_8h_source.html +5 -5
  34. package/SVF-doxygen/html/html/VFG_8cpp_source.html +9 -9
  35. package/SVF-doxygen/html/html/VFG_8h_source.html +8 -8
  36. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
  37. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +3 -3
  38. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +42 -43
  39. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +15 -18
  40. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +31 -31
  41. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
  42. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge-members.html +28 -25
  43. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +108 -15
  44. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +6 -6
  46. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +42 -43
  47. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +16 -19
  48. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
  49. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +7 -7
  50. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
  51. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
  52. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +4 -4
  53. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  54. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +30 -26
  56. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +22 -17
  57. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +30 -30
  58. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +1 -1
  59. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
  60. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +27 -26
  61. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +121 -82
  62. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +1 -1
  63. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
  64. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +45 -46
  65. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +8 -46
  66. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -2
  67. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +8 -8
  68. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +47 -48
  69. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +32 -33
  70. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
  71. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge-members.html +23 -20
  72. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +110 -15
  73. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +87 -86
  74. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +87 -76
  75. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
  76. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt-members.html +44 -45
  77. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +21 -24
  78. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +9 -9
  79. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +9 -9
  80. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +1 -1
  81. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +20 -20
  82. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +10 -10
  83. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  84. package/SVF-doxygen/html/html/functions_a.html +12 -10
  85. package/SVF-doxygen/html/html/functions_b.html +7 -12
  86. package/SVF-doxygen/html/html/functions_c.html +22 -18
  87. package/SVF-doxygen/html/html/functions_f.html +3 -3
  88. package/SVF-doxygen/html/html/functions_func.html +13 -11
  89. package/SVF-doxygen/html/html/functions_func_g.html +19 -17
  90. package/SVF-doxygen/html/html/functions_func_s.html +2 -2
  91. package/SVF-doxygen/html/html/functions_g.html +20 -18
  92. package/SVF-doxygen/html/html/functions_n.html +6 -6
  93. package/SVF-doxygen/html/html/functions_p.html +15 -15
  94. package/SVF-doxygen/html/html/functions_r.html +5 -2
  95. package/SVF-doxygen/html/html/functions_s.html +11 -11
  96. package/SVF-doxygen/html/html/functions_type_b.html +0 -3
  97. package/SVF-doxygen/html/html/functions_vars_b.html +2 -2
  98. package/SVF-doxygen/html/html/functions_vars_c.html +5 -1
  99. package/SVF-doxygen/html/html/functions_vars_r.html +3 -0
  100. package/SVF-doxygen/html/html/functions_w.html +5 -9
  101. package/SVF-doxygen/html/html/namespaceSVF.html +1 -1
  102. package/SVF-doxygen/html/html/search/all_1.js +3 -3
  103. package/SVF-doxygen/html/html/search/all_10.js +7 -7
  104. package/SVF-doxygen/html/html/search/all_12.js +3 -3
  105. package/SVF-doxygen/html/html/search/all_13.js +8 -8
  106. package/SVF-doxygen/html/html/search/all_14.js +2 -2
  107. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  108. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  109. package/SVF-doxygen/html/html/search/all_2.js +2 -3
  110. package/SVF-doxygen/html/html/search/all_3.js +2 -1
  111. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  112. package/SVF-doxygen/html/html/search/all_7.js +7 -7
  113. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  114. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  115. package/SVF-doxygen/html/html/search/all_e.js +6 -6
  116. package/SVF-doxygen/html/html/search/functions_0.js +3 -3
  117. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  118. package/SVF-doxygen/html/html/search/functions_6.js +7 -7
  119. package/SVF-doxygen/html/html/search/typedefs_1.js +0 -1
  120. package/SVF-doxygen/html/html/search/variables_12.js +1 -0
  121. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  122. package/SVF-doxygen/html/html/search/variables_2.js +1 -1
  123. package/SVF-doxygen/html/html/search/variables_3.js +2 -1
  124. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  125. package/SVF-doxygen/html/html/search/variables_e.js +3 -3
  126. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +18 -18
  127. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  128. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  129. package/include/Graphs/ICFG.h +1 -1
  130. package/include/Graphs/ICFGEdge.h +39 -17
  131. package/include/Graphs/ICFGNode.h +1 -1
  132. package/include/MemoryModel/SVFStatements.h +2 -11
  133. package/include/SVF-FE/SVFIRBuilder.h +3 -1
  134. package/include/Util/ExtAPI.h +1 -1
  135. package/lib/Graphs/ICFG.cpp +22 -7
  136. package/lib/MemoryModel/SVFIR.cpp +2 -1
  137. package/lib/MemoryModel/SVFStatements.cpp +6 -6
  138. package/lib/MemoryModel/SymbolTableInfo.cpp +1 -1
  139. package/lib/SVF-FE/ICFGBuilder.cpp +8 -3
  140. package/lib/SVF-FE/SVFIRBuilder.cpp +15 -3
  141. package/lib/Util/ExtAPI.cpp +0 -1
  142. package/package.json +1 -1
@@ -309,7 +309,9 @@ public:
309
309
  inline PhiStmt* addPhiStmt(NodeID res, NodeID opnd, const ICFGNode* pred)
310
310
  {
311
311
  PhiStmt *edge = pag->addPhiStmt(res,opnd,pred);
312
- setCurrentBBAndValueForPAGEdge(edge);
312
+ /// If we already added this phi node, then skip this adding
313
+ if(edge)
314
+ setCurrentBBAndValueForPAGEdge(edge);
313
315
  return edge;
314
316
  }
315
317
  /// Add SelectStmt
@@ -139,7 +139,7 @@ public:
139
139
  funName = "llvm." + F->getName().split('.').second.split('.').first.str();
140
140
  }
141
141
  llvm::StringMap<extf_t>::const_iterator it= info.find(funName);
142
- if(it == info.end() || !F->isDeclaration())
142
+ if(it == info.end())
143
143
  return EFT_OTHER;
144
144
  else
145
145
  return it->second;
@@ -149,10 +149,10 @@ const std::string ICFGEdge::toString() const {
149
149
  const std::string IntraCFGEdge::toString() const {
150
150
  std::string str;
151
151
  raw_string_ostream rawstr(str);
152
- if(brCondition.first == nullptr)
152
+ if(getCondition() == nullptr)
153
153
  rawstr << "IntraCFGEdge: [ICFGNode" << getDstID() << " <-- ICFGNode" << getSrcID() << "]\t";
154
154
  else
155
- rawstr << "IntraCFGEdge: [ICFGNode" << getDstID() << " <-- ICFGNode" << getSrcID() << "] with condition (" << *brCondition.first << "==" << brCondition.second << ") \t";
155
+ rawstr << "IntraCFGEdge: [ICFGNode" << getDstID() << " <-- ICFGNode" << getSrcID() << "] (branchCondition:" << *getCondition() << ") (succCondValue: " << getSuccessorCondValue() << ") \t";
156
156
 
157
157
  return rawstr.str();
158
158
  }
@@ -352,7 +352,7 @@ ICFGEdge* ICFG::addIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode)
352
352
  /*!
353
353
  * Add conditional intraprocedural edges between two nodes
354
354
  */
355
- ICFGEdge* ICFG::addConditionalIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode, const Value* condition, NodeID branchID){
355
+ ICFGEdge* ICFG::addConditionalIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode, const Value* condition, s64_t branchCondVal){
356
356
 
357
357
  checkIntraEdgeParents(srcNode, dstNode);
358
358
  if(ICFGEdge* edge = hasIntraICFGEdge(srcNode,dstNode, ICFGEdge::IntraCF))
@@ -363,7 +363,7 @@ ICFGEdge* ICFG::addConditionalIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode, co
363
363
  else
364
364
  {
365
365
  IntraCFGEdge* intraEdge = new IntraCFGEdge(srcNode,dstNode);
366
- intraEdge->setBranchCondtion(condition,branchID);
366
+ intraEdge->setBranchCondition(condition,branchCondVal);
367
367
  return (addICFGEdge(intraEdge) ? intraEdge : nullptr);
368
368
  }
369
369
  }
@@ -440,9 +440,24 @@ void ICFG::updateCallGraph(PTACallGraph* callgraph)
440
440
  RetICFGNode* retBlockNode = getRetICFGNode(cs);
441
441
  FunEntryICFGNode* calleeEntryNode = getFunEntryBlock(callee);
442
442
  FunExitICFGNode* calleeExitNode = getFunExitBlock(callee);
443
- addCallEdge(callBlockNode, calleeEntryNode, cs);
444
- addRetEdge(calleeExitNode, retBlockNode, cs);
445
-
443
+ if(ICFGEdge* callEdge = addCallEdge(callBlockNode, calleeEntryNode, cs)){
444
+ for (const SVFStmt *stmt : callBlockNode->getSVFStmts())
445
+ {
446
+ if(const CallPE *callPE = SVFUtil::dyn_cast<CallPE>(stmt)){
447
+ if(callPE->getFunEntryICFGNode() == calleeEntryNode)
448
+ SVFUtil::cast<CallCFGEdge>(callEdge)->addCallPE(callPE);
449
+ }
450
+ }
451
+ }
452
+ if(ICFGEdge* retEdge = addRetEdge(calleeExitNode, retBlockNode, cs)){
453
+ for (const SVFStmt *stmt : retBlockNode->getSVFStmts())
454
+ {
455
+ if(const RetPE *retPE = SVFUtil::dyn_cast<RetPE>(stmt)){
456
+ if(retPE->getFunExitICFGNode() == calleeExitNode)
457
+ SVFUtil::cast<RetCFGEdge>(retEdge)->addRetPE(retPE);
458
+ }
459
+ }
460
+ }
446
461
  /// if this is an external function (no function body), connect calleeEntryNode to calleeExitNode
447
462
  if (isExtCall(callee))
448
463
  addIntraEdge(calleeEntryNode, calleeExitNode);
@@ -98,7 +98,8 @@ PhiStmt* SVFIR::addPhiStmt(NodeID res, NodeID opnd, const ICFGNode* pred)
98
98
  }
99
99
  else{
100
100
  it->second->addOpVar(opNode,pred);
101
- return it->second;
101
+ /// return null if we already added this PhiStmt
102
+ return nullptr;
102
103
  }
103
104
  }
104
105
 
@@ -90,9 +90,9 @@ const std::string CopyStmt::toString() const{
90
90
  const std::string PhiStmt::toString() const{
91
91
  std::string str;
92
92
  raw_string_ostream rawstr(str);
93
- rawstr << "PhiStmt: [Var" << getResID() << " <-- (Var";
94
- for(const SVFVar* op : getOpndVars())
95
- rawstr << op->getId() << ",";
93
+ rawstr << "PhiStmt: [Var" << getResID() << " <-- (";
94
+ for(u32_t i = 0; i < getOpVarNum(); i++)
95
+ rawstr << "[Var" << getOpVar(i)->getId() << ", ICFGNode" << getOpICFGNode(i)->getId() << "],";
96
96
  rawstr << ")]\t";
97
97
  if (Options::ShowSVFIRValue) {
98
98
  rawstr << "\n";
@@ -152,12 +152,12 @@ const std::string BranchStmt::toString() const {
152
152
  std::string str;
153
153
  raw_string_ostream rawstr(str);
154
154
  if(isConditional())
155
- rawstr << "BranchStmt: [Condition Var" << getCondition()->getId() << "]\t";
155
+ rawstr << "BranchStmt: [Condition Var" << getCondition()->getId() << "]\n";
156
156
  else
157
- rawstr << "BranchStmt: [" << " Unconditional branch" << "]\t";
157
+ rawstr << "BranchStmt: [" << " Unconditional branch" << "]\n";
158
158
 
159
159
  for(u32_t i = 0; i < getNumSuccessors(); i++)
160
- rawstr << "Successor " << i << " ICFGNode" << getSuccessor(i)->getId() << "\n";
160
+ rawstr << "Successor " << i << " ICFGNode" << getSuccessor(i)->getId() << " ";
161
161
 
162
162
  if (Options::ShowSVFIRValue) {
163
163
  rawstr << "\n";
@@ -632,7 +632,7 @@ bool ObjTypeInfo::isNonPtrFieldObj(const LocationSet& ls)
632
632
  return false;
633
633
  }
634
634
  }
635
- assert(hasIntersection && "cannot find field of specified offset");
635
+ //assert(hasIntersection && "cannot find field of specified offset");
636
636
  return true;
637
637
  }
638
638
  else
@@ -97,7 +97,7 @@ void ICFGBuilder::processFunBody(WorkList& worklist)
97
97
  }
98
98
  InstVec nextInsts;
99
99
  getNextInsts(inst, nextInsts);
100
- NodeID branchID = 0;
100
+ u32_t branchID = 0;
101
101
  for (InstVec::const_iterator nit = nextInsts.begin(), enit =
102
102
  nextInsts.end(); nit != enit; ++nit)
103
103
  {
@@ -112,14 +112,19 @@ void ICFGBuilder::processFunBody(WorkList& worklist)
112
112
 
113
113
  if (const BranchInst* br = SVFUtil::dyn_cast<BranchInst>(inst))
114
114
  {
115
+ assert(branchID <= 2 && "if/else has more than two branches?");
115
116
  if(br->isConditional())
116
- icfg->addConditionalIntraEdge(srcNode, dstNode, br->getCondition(), branchID);
117
+ icfg->addConditionalIntraEdge(srcNode, dstNode, br->getCondition(), 1 - branchID);
117
118
  else
118
119
  icfg->addIntraEdge(srcNode, dstNode);
119
120
  }
120
121
  else if (const SwitchInst* si = SVFUtil::dyn_cast<SwitchInst>(inst))
121
122
  {
122
- icfg->addConditionalIntraEdge(srcNode, dstNode, si->getCondition(),branchID);
123
+ /// branch condition value
124
+ const ConstantInt* condVal = const_cast<SwitchInst*>(si)->findCaseDest(const_cast<BasicBlock*>(succ->getParent()));
125
+ /// default case is set to -1;
126
+ s64_t val = condVal ? condVal->getSExtValue() : -1;
127
+ icfg->addConditionalIntraEdge(srcNode, dstNode, si->getCondition(),val);
123
128
  }
124
129
  else
125
130
  icfg->addIntraEdge(srcNode, dstNode);
@@ -74,7 +74,7 @@ SVFIR* SVFIRBuilder::build(SVFModule* svfModule)
74
74
  {
75
75
  const SVFFunction& fun = **fit;
76
76
  /// collect return node of function fun
77
- if(!SVFUtil::isExtCall(&fun))
77
+ if(!fun.isDeclaration())
78
78
  {
79
79
  /// Return SVFIR node will not be created for function which can not
80
80
  /// reach the return instruction due to call to abort(), exit(),
@@ -629,7 +629,7 @@ void SVFIRBuilder::visitPHINode(PHINode &inst)
629
629
  const Value* val = inst.getIncomingValue(i);
630
630
  const Instruction* incomingInst = SVFUtil::dyn_cast<Instruction>(val);
631
631
  assert((incomingInst==nullptr) || (incomingInst->getFunction() == inst.getFunction()));
632
- const Instruction* predInst = &inst.getIncomingBlock(i)->front();
632
+ const Instruction* predInst = &inst.getIncomingBlock(i)->back();
633
633
  const ICFGNode* icfgNode = pag->getICFG()->getICFGNode(predInst);
634
634
  NodeID src = getValueNode(val);
635
635
  addPhiStmt(dst,src,icfgNode);
@@ -893,7 +893,7 @@ void SVFIRBuilder::visitBranchInst(BranchInst &inst){
893
893
  BranchStmt::SuccAndCondPairVec successors;
894
894
  for (u32_t i = 0; i < inst.getNumSuccessors(); ++i)
895
895
  {
896
- const Instruction* succInst = &inst.getSuccessor(i)->back();
896
+ const Instruction* succInst = &inst.getSuccessor(i)->front();
897
897
  const ICFGNode* icfgNode = pag->getICFG()->getICFGNode(succInst);
898
898
  successors.push_back(std::make_pair(icfgNode, 1-i));
899
899
  }
@@ -1687,6 +1687,18 @@ void SVFIRBuilder::setCurrentBBAndValueForPAGEdge(PAGEdge* edge)
1687
1687
 
1688
1688
  pag->addToSVFStmtList(icfgNode,edge);
1689
1689
  icfgNode->addSVFStmt(edge);
1690
+ if(const CallPE* callPE = SVFUtil::dyn_cast<CallPE>(edge)){
1691
+ CallICFGNode* callNode = const_cast<CallICFGNode*>(callPE->getCallSite());
1692
+ FunEntryICFGNode* entryNode = const_cast<FunEntryICFGNode*>(callPE->getFunEntryICFGNode());
1693
+ if(ICFGEdge* edge = pag->getICFG()->hasInterICFGEdge(callNode,entryNode, ICFGEdge::CallCF))
1694
+ SVFUtil::cast<CallCFGEdge>(edge)->addCallPE(callPE);
1695
+ }
1696
+ else if(const RetPE* retPE = SVFUtil::dyn_cast<RetPE>(edge)){
1697
+ RetICFGNode* retNode = const_cast<RetICFGNode*>(retPE->getCallSite()->getRetICFGNode());
1698
+ FunExitICFGNode* exitNode = const_cast<FunExitICFGNode*>(retPE->getFunExitICFGNode());
1699
+ if(ICFGEdge* edge = pag->getICFG()->hasInterICFGEdge(exitNode, retNode, ICFGEdge::RetCF))
1700
+ SVFUtil::cast<RetCFGEdge>(edge)->addRetPE(retPE);
1701
+ }
1690
1702
  }
1691
1703
 
1692
1704
 
@@ -461,7 +461,6 @@ static const ei_pair ei_pairs[]=
461
461
  {"SSLv23_client_method", ExtAPI::EFT_ALLOC},
462
462
  {"SyGetmem", ExtAPI::EFT_ALLOC},
463
463
  {"TLSv1_client_method", ExtAPI::EFT_ALLOC},
464
- {"Void_ExtendCore", ExtAPI::EFT_ALLOC},
465
464
  {"XAddExtension", ExtAPI::EFT_ALLOC},
466
465
  {"XAllocClassHint", ExtAPI::EFT_ALLOC},
467
466
  {"XAllocSizeHints", ExtAPI::EFT_ALLOC},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.368",
3
+ "version": "1.0.372",
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": {