svf-tools 1.0.757 → 1.0.759

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 (844) hide show
  1. package/CMakeLists.txt +7 -0
  2. package/README.md +2 -2
  3. package/SVF-doxygen/html/html/AccessPath_8cpp_source.html +4 -4
  4. package/SVF-doxygen/html/html/AddressValue_8h_source.html +1 -1
  5. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
  7. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  8. package/SVF-doxygen/html/html/Andersen_8h_source.html +3 -3
  9. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/CFBasicBlockG_8cpp_source.html +4 -4
  11. package/SVF-doxygen/html/html/CFBasicBlockG_8h_source.html +2 -2
  12. package/SVF-doxygen/html/html/CFGrammar_8cpp_source.html +11 -8
  13. package/SVF-doxygen/html/html/CFGrammar_8h_source.html +1 -1
  14. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +9 -9
  15. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +1 -1
  16. package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +17 -17
  18. package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
  19. package/SVF-doxygen/html/html/CHG_8cpp_source.html +7 -7
  20. package/SVF-doxygen/html/html/CHG_8h_source.html +4 -4
  21. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +6 -6
  22. package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/Casting_8h_source.html +1 -1
  24. package/SVF-doxygen/html/html/CommandLine_8h_source.html +2 -1
  25. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
  26. package/SVF-doxygen/html/html/ConsExeState_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/ConsExeState_8h_source.html +1 -1
  28. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +3 -3
  29. package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
  30. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
  31. package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +2 -2
  33. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +11 -11
  34. package/SVF-doxygen/html/html/DCHG_8h_source.html +3 -3
  35. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
  36. package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
  37. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  38. package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/ExeState_8h_source.html +1 -1
  41. package/SVF-doxygen/html/html/ExtAPI_8cpp.html +0 -196
  42. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +121 -786
  43. package/SVF-doxygen/html/html/ExtAPI_8h.html +2 -67
  44. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +69 -654
  45. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
  46. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +2 -2
  47. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -2
  48. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  49. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +3 -3
  50. package/SVF-doxygen/html/html/GraphTraits_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/GraphWriter_8h_source.html +1 -1
  52. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +13 -13
  53. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +2 -2
  54. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +1 -1
  55. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +4 -4
  56. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +7 -7
  57. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  58. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
  59. package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
  60. package/SVF-doxygen/html/html/IntervalExeState_8h_source.html +2 -2
  61. package/SVF-doxygen/html/html/IntervalValue_8h.html +1 -1
  62. package/SVF-doxygen/html/html/IntervalValue_8h_source.html +2 -2
  63. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +6 -6
  64. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8h_source.html +1 -1
  65. package/SVF-doxygen/html/html/LLVMModule_8cpp.html +3 -4
  66. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1411 -1292
  67. package/SVF-doxygen/html/html/LLVMModule_8h.html +1 -0
  68. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +418 -400
  69. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +744 -616
  70. package/SVF-doxygen/html/html/LLVMUtil_8h.html +9 -1
  71. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +485 -472
  72. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
  73. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +14 -14
  74. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +2 -2
  75. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +8 -8
  76. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
  77. package/SVF-doxygen/html/html/MHP_8cpp_source.html +15 -15
  78. package/SVF-doxygen/html/html/MHP_8h_source.html +4 -4
  79. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +4 -4
  80. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +5 -5
  81. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +4 -4
  82. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +7 -7
  83. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +7 -7
  84. package/SVF-doxygen/html/html/MTA_8cpp_source.html +4 -4
  85. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
  86. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +13 -13
  87. package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
  88. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +21 -21
  89. package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
  90. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +2 -2
  91. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +2 -2
  92. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +1 -1
  93. package/SVF-doxygen/html/html/NumericLiteral_8h_source.html +1 -1
  94. package/SVF-doxygen/html/html/Options_8cpp_source.html +9 -8
  95. package/SVF-doxygen/html/html/PCG_8cpp_source.html +13 -13
  96. package/SVF-doxygen/html/html/PCG_8h_source.html +3 -3
  97. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +3 -3
  98. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +2 -2
  99. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +1 -1
  100. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
  101. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +12 -12
  102. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +1 -1
  103. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +2 -2
  104. package/SVF-doxygen/html/html/PointsTo_8h_source.html +1 -1
  105. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +2 -2
  106. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +1 -1
  107. package/SVF-doxygen/html/html/RelExeState_8h_source.html +1 -1
  108. package/SVF-doxygen/html/html/SVFBugReport_8cpp_source.html +362 -365
  109. package/SVF-doxygen/html/html/SVFBugReport_8h_source.html +25 -25
  110. package/SVF-doxygen/html/html/SVFFileSystem_8cpp_source.html +2087 -2084
  111. package/SVF-doxygen/html/html/SVFFileSystem_8h.html +1 -1
  112. package/SVF-doxygen/html/html/SVFFileSystem_8h_source.html +62 -62
  113. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
  114. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
  115. package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +1 -1
  116. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +5 -5
  117. package/SVF-doxygen/html/html/SVFIR2ConsExeState_8cpp_source.html +6 -6
  118. package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +5 -5
  119. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +458 -531
  120. package/SVF-doxygen/html/html/SVFIRBuilder_8h.html +1 -1
  121. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +211 -233
  122. package/SVF-doxygen/html/html/SVFIRExtAPI_8cpp.html +2 -0
  123. package/SVF-doxygen/html/html/SVFIRExtAPI_8cpp_source.html +286 -682
  124. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +4 -4
  125. package/SVF-doxygen/html/html/SVFIR_8h_source.html +3 -3
  126. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +9 -9
  127. package/SVF-doxygen/html/html/SVFModule_8h.html +0 -1
  128. package/SVF-doxygen/html/html/SVFModule_8h_source.html +258 -260
  129. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +8 -8
  130. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +5 -5
  131. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +18 -18
  132. package/SVF-doxygen/html/html/SVFType_8h_source.html +6 -6
  133. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +8 -7
  134. package/SVF-doxygen/html/html/SVFUtil_8h.html +6 -11
  135. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +392 -405
  136. package/SVF-doxygen/html/html/SVFValue_8cpp_source.html +14 -13
  137. package/SVF-doxygen/html/html/SVFValue_8h_source.html +1038 -1030
  138. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
  139. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +1 -1
  140. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
  141. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +14 -14
  142. package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +6 -6
  143. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  144. package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +2 -2
  145. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  146. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +2 -2
  147. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +5 -5
  148. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  149. package/SVF-doxygen/html/html/SymState_8cpp_source.html +1 -1
  150. package/SVF-doxygen/html/html/SymState_8h_source.html +2 -2
  151. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +30 -30
  152. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +2 -2
  153. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +6 -6
  154. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +5 -5
  155. package/SVF-doxygen/html/html/TCT_8cpp_source.html +16 -16
  156. package/SVF-doxygen/html/html/TCT_8h_source.html +8 -8
  157. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +14 -14
  158. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +5 -5
  159. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  160. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +3 -3
  161. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  162. package/SVF-doxygen/html/html/VFG_8cpp_source.html +2 -2
  163. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  164. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +2 -2
  165. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  166. package/SVF-doxygen/html/html/WPASolver_8h_source.html +1 -1
  167. package/SVF-doxygen/html/html/WTO_8h_source.html +1 -1
  168. package/SVF-doxygen/html/html/annotated.html +2 -5
  169. package/SVF-doxygen/html/html/cJSON_8cpp.html +2 -1
  170. package/SVF-doxygen/html/html/cJSON_8cpp_source.html +2 -1
  171. package/SVF-doxygen/html/html/cJSON_8h_source.html +1 -1
  172. package/SVF-doxygen/html/html/cfl_8cpp.html +2 -2
  173. package/SVF-doxygen/html/html/cfl_8cpp_source.html +2 -2
  174. package/SVF-doxygen/html/html/classOption.html +2 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1AccessPath.html +6 -6
  176. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +2 -2
  177. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +2 -2
  178. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  179. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +2 -2
  180. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +4 -4
  182. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
  183. package/SVF-doxygen/html/html/classSVF_1_1AddressValue.html +1 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +1 -1
  185. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
  186. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +13 -13
  187. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +3 -3
  188. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +4 -4
  189. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +3 -3
  190. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
  191. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +3 -3
  192. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
  193. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +2 -2
  194. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +3 -3
  195. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +5 -5
  196. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -2
  197. package/SVF-doxygen/html/html/classSVF_1_1BitVector.html +1 -1
  198. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +3 -3
  199. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +1 -1
  200. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
  201. package/SVF-doxygen/html/html/classSVF_1_1BufferOverflowBug.html +50 -50
  202. package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockGWTO.html +1 -1
  203. package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockGWTOCycle.html +1 -1
  204. package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockNode.html +2 -2
  205. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +2 -2
  206. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +9 -9
  207. package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +1 -1
  208. package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +1 -1
  209. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +18 -18
  210. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +5 -5
  211. package/SVF-doxygen/html/html/classSVF_1_1CHNode.html +1 -1
  212. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  213. package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +3 -3
  214. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +6 -6
  215. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +3 -3
  216. package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +1 -1
  217. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +3 -3
  218. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +95 -95
  219. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +5 -5
  220. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -2
  221. package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet.html +3 -3
  222. package/SVF-doxygen/html/html/classSVF_1_1ConsExeState.html +2 -2
  223. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +7 -7
  224. package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +1 -1
  225. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +2 -2
  226. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +4 -4
  227. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +4 -4
  229. package/SVF-doxygen/html/html/classSVF_1_1CxtDPItem.html +1 -1
  230. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  231. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  232. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
  233. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +9 -9
  234. package/SVF-doxygen/html/html/classSVF_1_1DCHNode.html +1 -1
  235. package/SVF-doxygen/html/html/classSVF_1_1DPItem.html +1 -1
  236. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeBug.html +35 -35
  237. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +3 -3
  238. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +2 -2
  239. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +2 -2
  240. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +1 -1
  241. package/SVF-doxygen/html/html/classSVF_1_1EntryCHI.html +2 -2
  242. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +8 -77
  244. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +130 -1337
  245. package/SVF-doxygen/html/html/classSVF_1_1FILOWorkList.html +1 -1
  246. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +3 -3
  247. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +4 -4
  248. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +1 -1
  249. package/SVF-doxygen/html/html/classSVF_1_1FileNeverCloseBug.html +10 -10
  250. package/SVF-doxygen/html/html/classSVF_1_1FilePartialCloseBug.html +35 -35
  251. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +4 -4
  252. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  253. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +12 -12
  254. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  255. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  256. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  257. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  258. package/SVF-doxygen/html/html/classSVF_1_1FullNullPtrDereferenceBug.html +10 -10
  259. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +4 -4
  260. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +5 -5
  261. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +2 -2
  262. package/SVF-doxygen/html/html/classSVF_1_1GenericBug.html +9 -13
  263. package/SVF-doxygen/html/html/classSVF_1_1GenericGraphReader.html +1 -1
  264. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +2 -2
  265. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +3 -3
  266. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +4 -4
  267. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
  268. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +3 -3
  269. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
  270. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +11 -8
  271. package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder.html +2 -2
  272. package/SVF-doxygen/html/html/classSVF_1_1GraphWriter.html +1 -1
  273. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
  274. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +13 -13
  275. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  276. package/SVF-doxygen/html/html/classSVF_1_1ICFGWriter.html +11 -11
  277. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +1 -1
  278. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +2 -2
  279. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +2 -2
  280. package/SVF-doxygen/html/html/classSVF_1_1IntervalExeState.html +3 -3
  281. package/SVF-doxygen/html/html/classSVF_1_1IntervalValue.html +1 -1
  282. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
  283. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +4 -4
  284. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  285. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +2 -2
  286. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +5 -5
  287. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +42 -40
  288. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1586 -1455
  289. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
  290. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +4 -4
  291. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
  292. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +15 -15
  293. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +8 -8
  294. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +18 -18
  295. package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +3 -3
  296. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +14 -14
  297. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  298. package/SVF-doxygen/html/html/classSVF_1_1MSSACHI.html +4 -4
  299. package/SVF-doxygen/html/html/classSVF_1_1MSSADEF.html +2 -2
  300. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHI.html +2 -2
  301. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +2 -2
  302. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
  303. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +8 -8
  304. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +2 -2
  305. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +7 -7
  306. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
  307. package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +1 -1
  308. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +24 -24
  309. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +4 -4
  310. package/SVF-doxygen/html/html/classSVF_1_1MutableIncDFPTData.html +6 -6
  311. package/SVF-doxygen/html/html/classSVF_1_1NeverFreeBug.html +10 -10
  312. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +2 -2
  313. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
  314. package/SVF-doxygen/html/html/classSVF_1_1NumericLiteral.html +1 -1
  315. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +3 -3
  316. package/SVF-doxygen/html/html/classSVF_1_1Options.html +1 -1
  317. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +14 -14
  318. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -2
  319. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +3 -3
  320. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
  321. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +2 -2
  322. package/SVF-doxygen/html/html/classSVF_1_1PartialLeakBug.html +34 -34
  323. package/SVF-doxygen/html/html/classSVF_1_1PartialNullPtrDereferenceBug.html +10 -10
  324. package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +3 -3
  325. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +5 -5
  326. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +11 -11
  327. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +3 -3
  328. package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +1 -1
  329. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +3 -3
  330. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +7 -7
  331. package/SVF-doxygen/html/html/classSVF_1_1RaceValidator.html +3 -3
  332. package/SVF-doxygen/html/html/classSVF_1_1ReaderIDToObjMap.html +2 -2
  333. package/SVF-doxygen/html/html/classSVF_1_1ReaderPtrPool.html +2 -2
  334. package/SVF-doxygen/html/html/classSVF_1_1RelExeState.html +1 -1
  335. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  336. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +3 -3
  337. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +3 -3
  338. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +2 -2
  339. package/SVF-doxygen/html/html/classSVF_1_1SVFArgument.html +30 -30
  340. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +75 -75
  341. package/SVF-doxygen/html/html/classSVF_1_1SVFBlackHoleValue.html +15 -15
  342. package/SVF-doxygen/html/html/classSVF_1_1SVFBugEvent.html +50 -50
  343. package/SVF-doxygen/html/html/classSVF_1_1SVFBugReport.html +88 -88
  344. package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst.html +67 -67
  345. package/SVF-doxygen/html/html/classSVF_1_1SVFConstant.html +17 -17
  346. package/SVF-doxygen/html/html/classSVF_1_1SVFConstantData.html +23 -23
  347. package/SVF-doxygen/html/html/classSVF_1_1SVFConstantFP.html +21 -21
  348. package/SVF-doxygen/html/html/classSVF_1_1SVFConstantInt.html +27 -27
  349. package/SVF-doxygen/html/html/classSVF_1_1SVFConstantNullPtr.html +15 -15
  350. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction-members.html +15 -13
  351. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +222 -153
  352. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +5 -5
  353. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +5 -5
  354. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +3 -3
  355. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobalValue.html +34 -34
  356. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +7 -7
  357. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ConsExeState.html +5 -5
  358. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +5 -5
  359. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +64 -73
  360. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +915 -1777
  361. package/SVF-doxygen/html/html/classSVF_1_1SVFIRReader.html +1128 -1126
  362. package/SVF-doxygen/html/html/classSVF_1_1SVFIRWriter.html +548 -547
  363. package/SVF-doxygen/html/html/classSVF_1_1SVFInstruction.html +53 -53
  364. package/SVF-doxygen/html/html/classSVF_1_1SVFLoopAndDomInfo.html +3 -3
  365. package/SVF-doxygen/html/html/classSVF_1_1SVFMetadataAsValue.html +15 -15
  366. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +173 -173
  367. package/SVF-doxygen/html/html/classSVF_1_1SVFModuleReader.html +1 -1
  368. package/SVF-doxygen/html/html/classSVF_1_1SVFModuleWriter.html +23 -23
  369. package/SVF-doxygen/html/html/classSVF_1_1SVFOtherType.html +1 -1
  370. package/SVF-doxygen/html/html/classSVF_1_1SVFOtherValue.html +11 -11
  371. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +8 -8
  372. package/SVF-doxygen/html/html/classSVF_1_1SVFStructType.html +1 -1
  373. package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +27 -27
  374. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +4 -4
  375. package/SVF-doxygen/html/html/classSVF_1_1SVFVirtualCallInst.html +53 -53
  376. package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +15 -15
  377. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
  378. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +5 -5
  379. package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +1 -1
  380. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +3 -3
  381. package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +12 -12
  382. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +6 -6
  383. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
  384. package/SVF-doxygen/html/html/classSVF_1_1StoreCHI.html +2 -2
  385. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +4 -4
  386. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
  387. package/SVF-doxygen/html/html/classSVF_1_1SymState.html +3 -3
  388. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +34 -34
  389. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +11 -11
  390. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfoReader.html +1 -1
  391. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +18 -18
  392. package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
  393. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +4 -4
  394. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +4 -4
  395. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +8 -8
  396. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
  397. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +5 -5
  398. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +4 -4
  399. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +3 -3
  400. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +2 -2
  401. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +2 -2
  402. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  403. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +3 -3
  404. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +2 -2
  405. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +4 -4
  406. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  407. package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +1 -1
  408. package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +1 -1
  409. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
  410. package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +1 -1
  411. package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +3 -3
  412. package/SVF-doxygen/html/html/classSVF_1_1iter__adaptor__base.html +1 -1
  413. package/SVF-doxygen/html/html/classSVF_1_1iter__facade__base_1_1ReferenceProxy.html +1 -1
  414. package/SVF-doxygen/html/html/classSVF_1_1iter__range.html +1 -1
  415. package/SVF-doxygen/html/html/classSVF_1_1mapped__iter.html +1 -1
  416. package/SVF-doxygen/html/html/classSVF_1_1pointer__iterator.html +1 -1
  417. package/SVF-doxygen/html/html/classes.html +335 -338
  418. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  419. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  420. package/SVF-doxygen/html/html/dir_fee120689dee99ef16f8bfcaa7a76083.html +2 -0
  421. package/SVF-doxygen/html/html/extapi_8c.html +1950 -0
  422. package/SVF-doxygen/html/html/extapi_8c_source.html +1488 -0
  423. package/SVF-doxygen/html/html/fastcluster_8cpp.html +1 -1
  424. package/SVF-doxygen/html/html/fastcluster_8cpp_source.html +3 -3
  425. package/SVF-doxygen/html/html/fastcluster_8h.html +2 -2
  426. package/SVF-doxygen/html/html/fastcluster_8h_source.html +4 -4
  427. package/SVF-doxygen/html/html/files.html +10 -9
  428. package/SVF-doxygen/html/html/functions_a.html +17 -27
  429. package/SVF-doxygen/html/html/functions_b.html +9 -12
  430. package/SVF-doxygen/html/html/functions_c.html +26 -70
  431. package/SVF-doxygen/html/html/functions_d.html +3 -7
  432. package/SVF-doxygen/html/html/functions_e.html +4 -121
  433. package/SVF-doxygen/html/html/functions_enum.html +0 -6
  434. package/SVF-doxygen/html/html/functions_eval.html +0 -1
  435. package/SVF-doxygen/html/html/functions_eval_c.html +1 -15
  436. package/SVF-doxygen/html/html/functions_eval_e.html +0 -96
  437. package/SVF-doxygen/html/html/functions_eval_g.html +1 -2
  438. package/SVF-doxygen/html/html/functions_eval_l.html +0 -1
  439. package/SVF-doxygen/html/html/functions_eval_m.html +0 -6
  440. package/SVF-doxygen/html/html/functions_eval_o.html +0 -3
  441. package/SVF-doxygen/html/html/functions_eval_r.html +0 -6
  442. package/SVF-doxygen/html/html/functions_eval_s.html +0 -1
  443. package/SVF-doxygen/html/html/functions_f.html +16 -19
  444. package/SVF-doxygen/html/html/functions_func.html +6 -18
  445. package/SVF-doxygen/html/html/functions_func_e.html +1 -13
  446. package/SVF-doxygen/html/html/functions_func_g.html +24 -91
  447. package/SVF-doxygen/html/html/functions_func_h.html +9 -12
  448. package/SVF-doxygen/html/html/functions_func_i.html +16 -28
  449. package/SVF-doxygen/html/html/functions_func_n.html +0 -3
  450. package/SVF-doxygen/html/html/functions_func_p.html +3 -12
  451. package/SVF-doxygen/html/html/functions_func_s.html +20 -83
  452. package/SVF-doxygen/html/html/functions_g.html +32 -100
  453. package/SVF-doxygen/html/html/functions_h.html +6 -9
  454. package/SVF-doxygen/html/html/functions_i.html +16 -28
  455. package/SVF-doxygen/html/html/functions_l.html +0 -1
  456. package/SVF-doxygen/html/html/functions_m.html +1 -7
  457. package/SVF-doxygen/html/html/functions_n.html +4 -7
  458. package/SVF-doxygen/html/html/functions_o.html +31 -44
  459. package/SVF-doxygen/html/html/functions_p.html +18 -29
  460. package/SVF-doxygen/html/html/functions_r.html +9 -16
  461. package/SVF-doxygen/html/html/functions_s.html +16 -84
  462. package/SVF-doxygen/html/html/functions_t.html +4 -10
  463. package/SVF-doxygen/html/html/functions_v.html +3 -3
  464. package/SVF-doxygen/html/html/functions_vars_a.html +3 -0
  465. package/SVF-doxygen/html/html/functions_vars_b.html +0 -3
  466. package/SVF-doxygen/html/html/functions_vars_c.html +1 -23
  467. package/SVF-doxygen/html/html/functions_vars_d.html +1 -5
  468. package/SVF-doxygen/html/html/functions_vars_e.html +2 -8
  469. package/SVF-doxygen/html/html/functions_vars_f.html +0 -3
  470. package/SVF-doxygen/html/html/functions_vars_o.html +0 -9
  471. package/SVF-doxygen/html/html/functions_vars_r.html +1 -2
  472. package/SVF-doxygen/html/html/functions_vars_s.html +1 -5
  473. package/SVF-doxygen/html/html/functions_vars_t.html +0 -6
  474. package/SVF-doxygen/html/html/globals.html +22 -4
  475. package/SVF-doxygen/html/html/globals_a.html +3 -0
  476. package/SVF-doxygen/html/html/globals_b.html +3 -0
  477. package/SVF-doxygen/html/html/globals_defs.html +3 -9
  478. package/SVF-doxygen/html/html/globals_e.html +0 -3
  479. package/SVF-doxygen/html/html/globals_f.html +11 -2
  480. package/SVF-doxygen/html/html/globals_func.html +159 -15
  481. package/SVF-doxygen/html/html/globals_g.html +13 -4
  482. package/SVF-doxygen/html/html/globals_i.html +41 -2
  483. package/SVF-doxygen/html/html/globals_j.html +3 -6
  484. package/SVF-doxygen/html/html/globals_l.html +3 -0
  485. package/SVF-doxygen/html/html/globals_m.html +8 -2
  486. package/SVF-doxygen/html/html/globals_n.html +2 -1
  487. package/SVF-doxygen/html/html/globals_p.html +1 -4
  488. package/SVF-doxygen/html/html/globals_r.html +12 -6
  489. package/SVF-doxygen/html/html/globals_s.html +33 -0
  490. package/SVF-doxygen/html/html/globals_t.html +3 -0
  491. package/SVF-doxygen/html/html/hierarchy.html +526 -529
  492. package/SVF-doxygen/html/html/iterator_8h_source.html +1 -1
  493. package/SVF-doxygen/html/html/iterator__range_8h_source.html +1 -1
  494. package/SVF-doxygen/html/html/llvm2svf_8cpp.html +1 -1
  495. package/SVF-doxygen/html/html/llvm2svf_8cpp_source.html +1 -1
  496. package/SVF-doxygen/html/html/menudata.js +3 -0
  497. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  498. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  499. package/SVF-doxygen/html/html/namespaceSVF.html +154 -153
  500. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +1003 -776
  501. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +305 -375
  502. package/SVF-doxygen/html/html/namespacemembers_func_g.html +11 -5
  503. package/SVF-doxygen/html/html/namespacemembers_func_i.html +11 -14
  504. package/SVF-doxygen/html/html/namespacemembers_func_r.html +6 -0
  505. package/SVF-doxygen/html/html/namespacemembers_g.html +11 -5
  506. package/SVF-doxygen/html/html/namespacemembers_i.html +8 -11
  507. package/SVF-doxygen/html/html/namespacemembers_r.html +6 -0
  508. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  509. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  510. package/SVF-doxygen/html/html/search/all_0.js +153 -147
  511. package/SVF-doxygen/html/html/search/all_1.js +476 -478
  512. package/SVF-doxygen/html/html/search/all_10.js +323 -327
  513. package/SVF-doxygen/html/html/search/all_11.js +212 -209
  514. package/SVF-doxygen/html/html/search/all_12.js +536 -547
  515. package/SVF-doxygen/html/html/search/all_13.js +188 -189
  516. package/SVF-doxygen/html/html/search/all_14.js +66 -66
  517. package/SVF-doxygen/html/html/search/all_15.js +170 -170
  518. package/SVF-doxygen/html/html/search/all_16.js +60 -60
  519. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  520. package/SVF-doxygen/html/html/search/all_18.js +1 -1
  521. package/SVF-doxygen/html/html/search/all_19.js +10 -10
  522. package/SVF-doxygen/html/html/search/all_1a.js +169 -169
  523. package/SVF-doxygen/html/html/search/all_2.js +159 -159
  524. package/SVF-doxygen/html/html/search/all_3.js +597 -608
  525. package/SVF-doxygen/html/html/search/all_4.js +226 -227
  526. package/SVF-doxygen/html/html/search/all_5.js +116 -156
  527. package/SVF-doxygen/html/html/search/all_6.js +225 -223
  528. package/SVF-doxygen/html/html/search/all_7.js +996 -1012
  529. package/SVF-doxygen/html/html/search/all_8.js +191 -192
  530. package/SVF-doxygen/html/html/search/all_9.js +605 -597
  531. package/SVF-doxygen/html/html/search/all_a.js +46 -47
  532. package/SVF-doxygen/html/html/search/all_b.js +26 -26
  533. package/SVF-doxygen/html/html/search/all_c.js +114 -113
  534. package/SVF-doxygen/html/html/search/all_d.js +196 -196
  535. package/SVF-doxygen/html/html/search/all_e.js +205 -206
  536. package/SVF-doxygen/html/html/search/all_f.js +116 -122
  537. package/SVF-doxygen/html/html/search/classes_0.js +26 -26
  538. package/SVF-doxygen/html/html/search/classes_1.js +9 -9
  539. package/SVF-doxygen/html/html/search/classes_10.js +73 -73
  540. package/SVF-doxygen/html/html/search/classes_11.js +15 -15
  541. package/SVF-doxygen/html/html/search/classes_12.js +2 -2
  542. package/SVF-doxygen/html/html/search/classes_13.js +10 -10
  543. package/SVF-doxygen/html/html/search/classes_14.js +14 -14
  544. package/SVF-doxygen/html/html/search/classes_15.js +1 -1
  545. package/SVF-doxygen/html/html/search/classes_2.js +76 -76
  546. package/SVF-doxygen/html/html/search/classes_3.js +35 -35
  547. package/SVF-doxygen/html/html/search/classes_4.js +8 -10
  548. package/SVF-doxygen/html/html/search/classes_5.js +28 -28
  549. package/SVF-doxygen/html/html/search/classes_6.js +98 -98
  550. package/SVF-doxygen/html/html/search/classes_7.js +33 -33
  551. package/SVF-doxygen/html/html/search/classes_8.js +56 -56
  552. package/SVF-doxygen/html/html/search/classes_9.js +1 -1
  553. package/SVF-doxygen/html/html/search/classes_a.js +12 -12
  554. package/SVF-doxygen/html/html/search/classes_b.js +29 -29
  555. package/SVF-doxygen/html/html/search/classes_c.js +6 -6
  556. package/SVF-doxygen/html/html/search/classes_d.js +18 -19
  557. package/SVF-doxygen/html/html/search/classes_e.js +36 -36
  558. package/SVF-doxygen/html/html/search/classes_f.js +25 -25
  559. package/SVF-doxygen/html/html/search/defines_0.js +3 -3
  560. package/SVF-doxygen/html/html/search/defines_1.js +2 -2
  561. package/SVF-doxygen/html/html/search/defines_2.js +30 -30
  562. package/SVF-doxygen/html/html/search/defines_3.js +20 -20
  563. package/SVF-doxygen/html/html/search/defines_4.js +2 -3
  564. package/SVF-doxygen/html/html/search/defines_5.js +4 -4
  565. package/SVF-doxygen/html/html/search/defines_6.js +2 -2
  566. package/SVF-doxygen/html/html/search/defines_7.js +5 -5
  567. package/SVF-doxygen/html/html/search/defines_8.js +11 -13
  568. package/SVF-doxygen/html/html/search/defines_9.js +9 -9
  569. package/SVF-doxygen/html/html/search/defines_a.js +2 -2
  570. package/SVF-doxygen/html/html/search/defines_b.js +1 -1
  571. package/SVF-doxygen/html/html/search/defines_c.js +3 -2
  572. package/SVF-doxygen/html/html/search/defines_d.js +2 -2
  573. package/SVF-doxygen/html/html/search/defines_e.js +6 -6
  574. package/SVF-doxygen/html/html/search/defines_f.js +3 -3
  575. package/SVF-doxygen/html/html/search/enums_0.js +3 -3
  576. package/SVF-doxygen/html/html/search/enums_1.js +2 -2
  577. package/SVF-doxygen/html/html/search/enums_10.js +1 -1
  578. package/SVF-doxygen/html/html/search/enums_11.js +1 -1
  579. package/SVF-doxygen/html/html/search/enums_2.js +8 -8
  580. package/SVF-doxygen/html/html/search/enums_3.js +1 -1
  581. package/SVF-doxygen/html/html/search/enums_4.js +3 -4
  582. package/SVF-doxygen/html/html/search/enums_5.js +1 -1
  583. package/SVF-doxygen/html/html/search/enums_6.js +2 -2
  584. package/SVF-doxygen/html/html/search/enums_7.js +2 -2
  585. package/SVF-doxygen/html/html/search/enums_8.js +4 -4
  586. package/SVF-doxygen/html/html/search/enums_9.js +1 -1
  587. package/SVF-doxygen/html/html/search/enums_a.js +1 -2
  588. package/SVF-doxygen/html/html/search/enums_b.js +7 -7
  589. package/SVF-doxygen/html/html/search/enums_c.js +1 -1
  590. package/SVF-doxygen/html/html/search/enums_d.js +4 -4
  591. package/SVF-doxygen/html/html/search/enums_e.js +2 -2
  592. package/SVF-doxygen/html/html/search/enums_f.js +4 -4
  593. package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
  594. package/SVF-doxygen/html/html/search/enumvalues_1.js +14 -14
  595. package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
  596. package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
  597. package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
  598. package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
  599. package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
  600. package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
  601. package/SVF-doxygen/html/html/search/enumvalues_2.js +36 -40
  602. package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
  603. package/SVF-doxygen/html/html/search/enumvalues_4.js +2 -34
  604. package/SVF-doxygen/html/html/search/enumvalues_5.js +48 -48
  605. package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
  606. package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
  607. package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
  608. package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
  609. package/SVF-doxygen/html/html/search/enumvalues_a.js +15 -17
  610. package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
  611. package/SVF-doxygen/html/html/search/enumvalues_c.js +5 -6
  612. package/SVF-doxygen/html/html/search/enumvalues_d.js +18 -18
  613. package/SVF-doxygen/html/html/search/enumvalues_e.js +9 -11
  614. package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
  615. package/SVF-doxygen/html/html/search/files_0.js +13 -13
  616. package/SVF-doxygen/html/html/search/files_1.js +7 -7
  617. package/SVF-doxygen/html/html/search/files_10.js +8 -8
  618. package/SVF-doxygen/html/html/search/files_11.js +8 -8
  619. package/SVF-doxygen/html/html/search/files_12.js +2 -2
  620. package/SVF-doxygen/html/html/search/files_2.js +49 -49
  621. package/SVF-doxygen/html/html/search/files_3.js +14 -14
  622. package/SVF-doxygen/html/html/search/files_4.js +5 -4
  623. package/SVF-doxygen/html/html/search/files_5.js +13 -13
  624. package/SVF-doxygen/html/html/search/files_6.js +9 -9
  625. package/SVF-doxygen/html/html/search/files_7.js +14 -14
  626. package/SVF-doxygen/html/html/search/files_8.js +13 -13
  627. package/SVF-doxygen/html/html/search/files_9.js +18 -18
  628. package/SVF-doxygen/html/html/search/files_a.js +3 -3
  629. package/SVF-doxygen/html/html/search/files_b.js +2 -2
  630. package/SVF-doxygen/html/html/search/files_c.js +20 -20
  631. package/SVF-doxygen/html/html/search/files_d.js +4 -4
  632. package/SVF-doxygen/html/html/search/files_e.js +62 -62
  633. package/SVF-doxygen/html/html/search/files_f.js +8 -8
  634. package/SVF-doxygen/html/html/search/functions_0.js +6 -351
  635. package/SVF-doxygen/html/html/search/functions_1.js +348 -81
  636. package/SVF-doxygen/html/html/search/functions_10.js +139 -122
  637. package/SVF-doxygen/html/html/search/functions_11.js +126 -283
  638. package/SVF-doxygen/html/html/search/functions_12.js +273 -55
  639. package/SVF-doxygen/html/html/search/functions_13.js +56 -38
  640. package/SVF-doxygen/html/html/search/functions_14.js +38 -71
  641. package/SVF-doxygen/html/html/search/functions_15.js +71 -29
  642. package/SVF-doxygen/html/html/search/functions_16.js +29 -2
  643. package/SVF-doxygen/html/html/search/functions_17.js +2 -169
  644. package/SVF-doxygen/html/html/search/functions_18.html +30 -0
  645. package/SVF-doxygen/html/html/search/functions_18.js +172 -0
  646. package/SVF-doxygen/html/html/search/functions_2.js +82 -251
  647. package/SVF-doxygen/html/html/search/functions_3.js +251 -71
  648. package/SVF-doxygen/html/html/search/functions_4.js +71 -55
  649. package/SVF-doxygen/html/html/search/functions_5.js +51 -55
  650. package/SVF-doxygen/html/html/search/functions_6.js +58 -832
  651. package/SVF-doxygen/html/html/search/functions_7.js +816 -144
  652. package/SVF-doxygen/html/html/search/functions_8.js +143 -417
  653. package/SVF-doxygen/html/html/search/functions_9.js +425 -29
  654. package/SVF-doxygen/html/html/search/functions_a.js +30 -2
  655. package/SVF-doxygen/html/html/search/functions_b.js +2 -23
  656. package/SVF-doxygen/html/html/search/functions_c.js +24 -75
  657. package/SVF-doxygen/html/html/search/functions_d.js +77 -35
  658. package/SVF-doxygen/html/html/search/functions_e.js +34 -56
  659. package/SVF-doxygen/html/html/search/functions_f.js +56 -143
  660. package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
  661. package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
  662. package/SVF-doxygen/html/html/search/related_0.js +2 -2
  663. package/SVF-doxygen/html/html/search/related_1.js +1 -1
  664. package/SVF-doxygen/html/html/search/related_2.js +2 -2
  665. package/SVF-doxygen/html/html/search/related_3.js +2 -2
  666. package/SVF-doxygen/html/html/search/related_4.js +2 -2
  667. package/SVF-doxygen/html/html/search/related_5.js +1 -1
  668. package/SVF-doxygen/html/html/search/related_6.js +2 -2
  669. package/SVF-doxygen/html/html/search/related_7.js +4 -4
  670. package/SVF-doxygen/html/html/search/related_8.js +2 -2
  671. package/SVF-doxygen/html/html/search/related_9.js +4 -4
  672. package/SVF-doxygen/html/html/search/related_a.js +19 -19
  673. package/SVF-doxygen/html/html/search/related_b.js +4 -4
  674. package/SVF-doxygen/html/html/search/related_c.js +1 -1
  675. package/SVF-doxygen/html/html/search/related_d.js +11 -11
  676. package/SVF-doxygen/html/html/search/related_e.js +2 -2
  677. package/SVF-doxygen/html/html/search/related_f.js +2 -2
  678. package/SVF-doxygen/html/html/search/searchdata.js +1 -1
  679. package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
  680. package/SVF-doxygen/html/html/search/typedefs_1.js +25 -25
  681. package/SVF-doxygen/html/html/search/typedefs_10.js +60 -60
  682. package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
  683. package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
  684. package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
  685. package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
  686. package/SVF-doxygen/html/html/search/typedefs_2.js +126 -126
  687. package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
  688. package/SVF-doxygen/html/html/search/typedefs_4.js +16 -16
  689. package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
  690. package/SVF-doxygen/html/html/search/typedefs_6.js +52 -52
  691. package/SVF-doxygen/html/html/search/typedefs_7.js +40 -40
  692. package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
  693. package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
  694. package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
  695. package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
  696. package/SVF-doxygen/html/html/search/typedefs_c.js +40 -40
  697. package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
  698. package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
  699. package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
  700. package/SVF-doxygen/html/html/search/variables_0.js +147 -147
  701. package/SVF-doxygen/html/html/search/variables_1.js +75 -74
  702. package/SVF-doxygen/html/html/search/variables_10.js +97 -97
  703. package/SVF-doxygen/html/html/search/variables_11.js +46 -46
  704. package/SVF-doxygen/html/html/search/variables_12.js +92 -93
  705. package/SVF-doxygen/html/html/search/variables_13.js +75 -77
  706. package/SVF-doxygen/html/html/search/variables_14.js +14 -14
  707. package/SVF-doxygen/html/html/search/variables_15.js +48 -48
  708. package/SVF-doxygen/html/html/search/variables_16.js +9 -9
  709. package/SVF-doxygen/html/html/search/variables_17.js +1 -1
  710. package/SVF-doxygen/html/html/search/variables_18.js +2 -2
  711. package/SVF-doxygen/html/html/search/variables_2.js +34 -35
  712. package/SVF-doxygen/html/html/search/variables_3.js +141 -148
  713. package/SVF-doxygen/html/html/search/variables_4.js +55 -56
  714. package/SVF-doxygen/html/html/search/variables_5.js +38 -40
  715. package/SVF-doxygen/html/html/search/variables_6.js +66 -67
  716. package/SVF-doxygen/html/html/search/variables_7.js +33 -33
  717. package/SVF-doxygen/html/html/search/variables_8.js +7 -7
  718. package/SVF-doxygen/html/html/search/variables_9.js +77 -77
  719. package/SVF-doxygen/html/html/search/variables_a.js +4 -4
  720. package/SVF-doxygen/html/html/search/variables_b.js +10 -10
  721. package/SVF-doxygen/html/html/search/variables_c.js +45 -45
  722. package/SVF-doxygen/html/html/search/variables_d.js +56 -56
  723. package/SVF-doxygen/html/html/search/variables_e.js +123 -123
  724. package/SVF-doxygen/html/html/search/variables_f.js +30 -33
  725. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  726. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  727. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +2 -2
  728. package/SVF-doxygen/html/html/structSVF_1_1MemRegion_1_1equalMemRegion.html +1 -1
  729. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__iterable.html +1 -1
  730. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__iterable_3_01T_00_01void__t_3_01decltype_07std_1_1begin_07std_1_1dec794949348c8e1e00603fd8633b6dd1f3.html +1 -1
  731. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__map.html +1 -1
  732. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__map_3_01std_1_1map_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  733. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__map_3_01std_1_1unordered__map_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  734. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container.html +1 -1
  735. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container_3_01std_1_1deque_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  736. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container_3_01std_1_1list_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  737. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container_3_01std_1_1vector_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  738. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__set.html +1 -1
  739. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__set_3_01std_1_1set_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  740. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__set_3_01std_1_1unordered__set_3_01Ts_8_8_8_01_4_01_4.html +1 -1
  741. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1make__void.html +4 -4
  742. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +7 -7
  743. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmt_01_4.html +1 -1
  744. package/SVF-doxygen/html/html/svf-ex_8cpp.html +3 -3
  745. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +4 -4
  746. package/SVF-doxygen/html/html/svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html +9 -9
  747. package/SVF-doxygen/html/html/svf_2include_2MTA_2MTAResultValidator_8h_source.html +9 -9
  748. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  749. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  750. package/build.sh +1 -1
  751. package/package.json +1 -1
  752. package/svf/include/AbstractExecution/ConsExeState.h +1 -1
  753. package/svf/include/AbstractExecution/IntervalExeState.h +1 -1
  754. package/svf/include/AbstractExecution/IntervalValue.h +1 -1
  755. package/svf/include/AbstractExecution/SymState.h +1 -1
  756. package/svf/include/CFL/CFGrammar.h +1 -1
  757. package/svf/include/CFL/GrammarBuilder.h +3 -3
  758. package/svf/include/FastCluster/fastcluster.h +4 -4
  759. package/svf/include/Graphs/CHG.h +1 -1
  760. package/svf/include/Graphs/ConsG.h +3 -3
  761. package/svf/include/Graphs/GenericGraph.h +2 -2
  762. package/svf/include/Graphs/GraphTraits.h +1 -1
  763. package/svf/include/Graphs/GraphWriter.h +1 -1
  764. package/svf/include/Graphs/IRGraph.h +1 -1
  765. package/svf/include/Graphs/PTACallGraph.h +1 -1
  766. package/svf/include/Graphs/VFGNode.h +2 -2
  767. package/svf/include/MSSA/MSSAMuChi.h +2 -2
  768. package/svf/include/MSSA/MemRegion.h +1 -1
  769. package/svf/include/MSSA/MemSSA.h +1 -1
  770. package/svf/include/MTA/FSMPTA.h +1 -1
  771. package/svf/include/MTA/MHP.h +1 -1
  772. package/svf/include/MTA/TCT.h +1 -1
  773. package/svf/include/MemoryModel/ConditionalPT.h +1 -1
  774. package/svf/include/MemoryModel/MutablePointsToDS.h +2 -2
  775. package/svf/include/MemoryModel/PersistentPointsToDS.h +1 -1
  776. package/svf/include/MemoryModel/PointerAnalysis.h +1 -1
  777. package/svf/include/MemoryModel/PointsTo.h +1 -1
  778. package/svf/include/SABER/SaberCondAllocator.h +1 -1
  779. package/svf/include/SABER/SrcSnkDDA.h +1 -1
  780. package/svf/include/SVFIR/SVFFileSystem.h +3 -3
  781. package/svf/include/SVFIR/SVFIR.h +1 -1
  782. package/svf/include/SVFIR/SVFModule.h +0 -1
  783. package/svf/include/SVFIR/SVFStatements.h +19 -19
  784. package/svf/include/SVFIR/SVFType.h +5 -5
  785. package/svf/include/SVFIR/SVFValue.h +8 -2
  786. package/svf/include/SVFIR/SVFVariables.h +3 -3
  787. package/svf/include/SVFIR/SymbolTableInfo.h +3 -3
  788. package/svf/include/Util/Casting.h +1 -1
  789. package/svf/include/Util/CoreBitVector.h +2 -2
  790. package/svf/include/Util/DPItem.h +1 -1
  791. package/svf/include/Util/ExtAPI.h +11 -457
  792. package/svf/include/Util/NodeIDAllocator.h +1 -1
  793. package/svf/include/Util/Options.h +1 -1
  794. package/svf/include/Util/SVFBugReport.h +1 -1
  795. package/svf/include/Util/SVFUtil.h +11 -26
  796. package/svf/include/Util/WorkList.h +1 -1
  797. package/svf/include/Util/cJSON.h +1 -1
  798. package/svf/include/WPA/Andersen.h +1 -1
  799. package/svf/include/WPA/FlowSensitive.h +1 -1
  800. package/svf/include/WPA/WPASolver.h +1 -1
  801. package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +1 -1
  802. package/svf/lib/CFL/CFGNormalizer.cpp +2 -2
  803. package/svf/lib/CFL/CFLAlias.cpp +2 -2
  804. package/svf/lib/CFL/CFLGraphBuilder.cpp +2 -2
  805. package/svf/lib/CFL/CFLVF.cpp +1 -1
  806. package/svf/lib/DDA/ContextDDA.cpp +1 -1
  807. package/svf/lib/FastCluster/fastcluster.cpp +3 -3
  808. package/svf/lib/Graphs/ConsG.cpp +1 -1
  809. package/svf/lib/Graphs/SVFGOPT.cpp +2 -2
  810. package/svf/lib/Graphs/VFG.cpp +2 -2
  811. package/svf/lib/MSSA/MemRegion.cpp +1 -1
  812. package/svf/lib/MTA/FSMPTA.cpp +1 -1
  813. package/svf/lib/MTA/LockAnalysis.cpp +1 -1
  814. package/svf/lib/MTA/MHP.cpp +1 -1
  815. package/svf/lib/MemoryModel/AccessPath.cpp +2 -2
  816. package/svf/lib/SABER/ProgSlice.cpp +1 -1
  817. package/svf/lib/SABER/SaberCondAllocator.cpp +1 -1
  818. package/svf/lib/SVFIR/SVFFileSystem.cpp +3 -1
  819. package/svf/lib/SVFIR/SVFIR.cpp +3 -3
  820. package/svf/lib/SVFIR/SVFValue.cpp +5 -5
  821. package/svf/lib/SVFIR/SymbolTableInfo.cpp +2 -2
  822. package/svf/lib/Util/ExtAPI.cpp +36 -595
  823. package/svf/lib/Util/NodeIDAllocator.cpp +2 -2
  824. package/svf/lib/Util/Options.cpp +8 -8
  825. package/svf/lib/Util/SVFBugReport.cpp +0 -2
  826. package/svf/lib/Util/SVFUtil.cpp +2 -2
  827. package/svf/lib/Util/extapi.c +1348 -0
  828. package/svf/lib/WPA/Andersen.cpp +6 -6
  829. package/svf/lib/WPA/VersionedFlowSensitive.cpp +2 -2
  830. package/svf-llvm/CMakeLists.txt +1 -1
  831. package/svf-llvm/include/SVF-LLVM/GEPTypeBridgeIterator.h +1 -1
  832. package/svf-llvm/include/SVF-LLVM/LLVMModule.h +17 -0
  833. package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +14 -1
  834. package/svf-llvm/include/SVF-LLVM/SVFIRBuilder.h +5 -14
  835. package/svf-llvm/include/SVF-LLVM/SymbolTableBuilder.h +1 -1
  836. package/svf-llvm/lib/BreakConstantExpr.cpp +1 -1
  837. package/svf-llvm/lib/ICFGBuilder.cpp +2 -2
  838. package/svf-llvm/lib/LLVMModule.cpp +160 -46
  839. package/svf-llvm/lib/LLVMUtil.cpp +121 -0
  840. package/svf-llvm/lib/SVFIRBuilder.cpp +12 -81
  841. package/svf-llvm/lib/SVFIRExtAPI.cpp +161 -536
  842. package/svf-llvm/lib/SymbolTableBuilder.cpp +2 -2
  843. package/svf-llvm/tools/MTA/MTAResultValidator.cpp +1 -1
  844. package/svf/include/Util/ExtAPI.json +0 -5853
@@ -69,7 +69,7 @@ $(function() {
69
69
  <div class="title">SVFIRExtAPI.cpp</div> </div>
70
70
  </div><!--header-->
71
71
  <div class="contents">
72
- <a href="SVFIRExtAPI_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- SVFIR.cpp -- Exteral function IR of SVF ---------------------------------------------//</span></div>
72
+ <a href="SVFIRExtAPI_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- SVFIRExtAPI.cpp -- External function IR of SVF ---------------------------------------------//</span></div>
73
73
  <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div>
74
74
  <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div>
75
75
  <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div>
@@ -99,704 +99,308 @@ $(function() {
99
99
  <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div>
100
100
  <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
101
101
  <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFIRBuilder_8h.html">SVF-LLVM/SVFIRBuilder.h</a>&quot;</span></div>
102
- <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
103
- <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">using namespace </span>std;</div>
104
- <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div>
105
- <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div>
106
- <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
107
- <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
108
- <div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a1f62f737be41d8b275d82bcb8112d2d4"> 41</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::addComplexConsForExt(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* D, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* S, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* szValue)</div>
109
- <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div>
110
- <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; assert(D &amp;&amp; S);</div>
111
- <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= pag-&gt;getValueNode(D), vnS= pag-&gt;getValueNode(S);</div>
112
- <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span>(!vnD || !vnS)</div>
113
- <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span>;</div>
114
- <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
115
- <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; std::vector&lt;AccessPath&gt; fields;</div>
102
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div>
103
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SymbolTableBuilder_8h.html">SVF-LLVM/SymbolTableBuilder.h</a>&quot;</span></div>
104
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
105
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>std;</div>
106
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div>
107
+ <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div>
108
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using namespace </span>LLVMUtil;</div>
109
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
110
+ <div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aa7e7b3dba00201972783f93c35cadad9"> 42</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SVFIRBuilder::getBaseTypeAndFlattenedFields(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V, std::vector&lt;AccessPath&gt; &amp;fields, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* szValue)</div>
111
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
112
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; assert(V);</div>
113
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value = getBaseValueForExtArg(V);</div>
114
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* T = value-&gt;getType();</div>
115
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *ptype = SVFUtil::dyn_cast&lt;PointerType&gt;(T))</div>
116
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; T = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(ptype);</div>
116
117
  <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
117
- <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">//Get the max possible size of the copy, unless it was provided.</span></div>
118
- <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* stype = pag-&gt;getTypeLocSetsMap(vnS).first;</div>
119
- <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dtype = pag-&gt;getTypeLocSetsMap(vnD).first;</div>
120
- <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; std::vector&lt;AccessPath&gt; srcFields = pag-&gt;getTypeLocSetsMap(vnS).second;</div>
121
- <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::vector&lt;AccessPath&gt; dstFields = pag-&gt;getTypeLocSetsMap(vnD).second;</div>
122
- <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
123
- <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span>(srcFields.size() &gt; dstFields.size())</div>
124
- <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; fields = dstFields;</div>
125
- <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">else</span></div>
126
- <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; fields = srcFields;</div>
127
- <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
128
- <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = fields.size();</div>
129
- <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (szValue &amp;&amp; SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(szValue))</div>
130
- <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div>
131
- <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>* arg2 = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(szValue);</div>
132
- <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; sz = (fields.size() &gt; <span class="keyword">static_cast&lt;</span><a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a><span class="keyword">&gt;</span>(arg2-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>())) ? arg2-&gt;<a class="code" href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">getSExtValue</a>() : fields.size();</div>
133
- <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
134
- <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
135
- <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (fields.size() == 1 &amp;&amp; (SVFUtil::isa&lt;SVFConstantData&gt;(D) || SVFUtil::isa&lt;SVFConstantData&gt;(S)))</div>
136
- <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
137
- <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = pag-&gt;addDummyValNode();</div>
138
- <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; addLoadEdge(vnD,dummy);</div>
139
- <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; addStoreEdge(dummy,vnS);</div>
140
- <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span>;</div>
141
- <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
142
- <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
143
- <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">//For each field (i), add (Ti = *S + i) and (*D + i = Ti).</span></div>
144
- <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; sz; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
145
- <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
146
- <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(dtype,</div>
147
- <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantFieldIdx());</div>
148
- <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* sElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(stype,</div>
149
- <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantFieldIdx());</div>
150
- <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = getGepValVar(D,fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>],dElementType);</div>
151
- <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> sField = getGepValVar(S,fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>],sElementType);</div>
152
- <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = pag-&gt;addDummyValNode();</div>
153
- <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; addLoadEdge(sField,dummy);</div>
154
- <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; addStoreEdge(dummy,dField);</div>
155
- <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
156
- <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div>
157
- <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
158
- <div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22303cbfa377e75a9ca6f80fe3090837"> 92</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getExtID(<a class="code" href="classSVF_1_1ExtAPI.html#ac88fa9d671d9b701c072a454e6c30c0f">ExtAPI::OperationType</a> operationType, <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;s, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfCall)</div>
159
- <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div>
160
- <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> nodeIDType = ExtAPI::getExtAPI()-&gt;getNodeIDType(s);</div>
161
- <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
162
- <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// return value &gt;= 0 is an argument node</span></div>
163
- <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (nodeIDType &gt;= 0)</div>
164
- <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
165
- <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; assert(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">arg_size</a>() &gt; (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) nodeIDType &amp;&amp; <span class="stringliteral">&quot;Argument out of bounds!&quot;</span>);</div>
166
- <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">if</span> (operationType == ExtAPI::OperationType::Memcpy_like || operationType == ExtAPI::OperationType::Memset_like)</div>
167
- <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> nodeIDType;</div>
168
- <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">else</span></div>
169
- <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(nodeIDType));</div>
170
- <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
171
- <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// return value = -1 is an inst node</span></div>
172
- <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeIDType == -1)</div>
173
- <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> pag-&gt;getValueNode(svfCall);</div>
174
- <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// return value = -2 is a Dummy node</span></div>
175
- <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeIDType == -2)</div>
176
- <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> pag-&gt;addDummyValNode();</div>
177
- <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// return value = -3 is an object node</span></div>
178
- <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeIDType == -3)</div>
179
- <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div>
180
- <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; assert(svfCall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() &amp;&amp; <span class="stringliteral">&quot;The operand should be a pointer type!&quot;</span>);</div>
181
- <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> objId;</div>
182
- <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// Indirect call</span></div>
183
- <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">getCallee</a>(svfCall) == <span class="keyword">nullptr</span>)</div>
184
- <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; objId = pag-&gt;addDummyObjNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>());</div>
185
- <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">else</span> <span class="comment">// Direct call</span></div>
186
- <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; objId = pag-&gt;getObjectNode(svfCall);</div>
187
- <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> objId;</div>
188
- <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
189
- <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// return value = -4 is a nullptr node</span></div>
190
- <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeIDType == -4)</div>
191
- <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> pag-&gt;getNullPtr();</div>
192
- <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// return value = -5 is an offset</span></div>
193
- <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeIDType == -5)</div>
194
- <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div>
195
- <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">char</span> <span class="keyword">const</span> &amp;c : s)</div>
196
- <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
197
- <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (std::isdigit(c) == 0)</div>
198
- <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Invalid offset!&quot;</span>);</div>
199
- <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div>
200
- <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> atoi(s.c_str());</div>
201
- <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div>
202
- <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// return value = -6 is an illegal operand format</span></div>
203
- <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span></div>
118
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> numOfElems = pag-&gt;getSymbolInfo()-&gt;getNumOfFlattenElements(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(T));</div>
119
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span>(szValue &amp;&amp; SVFUtil::isa&lt;ConstantInt&gt;(szValue))</div>
120
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div>
121
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; numOfElems = (numOfElems &gt; SVFUtil::cast&lt;ConstantInt&gt;(szValue)-&gt;getSExtValue()) ? SVFUtil::cast&lt;ConstantInt&gt;(szValue)-&gt;getSExtValue() : numOfElems;</div>
122
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
123
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
124
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a>&amp; context = LLVMModuleSet::getLLVMModuleSet()-&gt;getContext();</div>
125
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> ei = 0; ei &lt; numOfElems; ei++)</div>
126
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
127
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ls(ei);</div>
128
+ <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// make a ConstantInt and create char for the content type due to byte-wise copy</span></div>
129
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = ConstantInt::get(context, llvm::APInt(32, ei));</div>
130
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfOffset = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
131
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (!pag-&gt;getSymbolInfo()-&gt;hasValSym(svfOffset))</div>
132
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div>
133
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classSVF_1_1SymbolTableBuilder.html">SymbolTableBuilder</a> builder(pag-&gt;getSymbolInfo());</div>
134
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; builder.<a class="code" href="classSVF_1_1SymbolTableBuilder.html#ac2fa9a797e3e2a8885ccc488030659d5">collectSym</a>(<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
135
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; pag-&gt;addValNode(svfOffset, pag-&gt;getSymbolInfo()-&gt;getValSym(svfOffset));</div>
136
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div>
137
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; ls.<a class="code" href="classSVF_1_1AccessPath.html#a2358a8194b5e2c4bcbb5218dee7fcbcd">addOffsetVarAndGepTypePair</a>(getPAG()-&gt;getGNode(getPAG()-&gt;getValueNode(svfOffset)), <span class="keyword">nullptr</span>);</div>
138
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; fields.push_back(ls);</div>
139
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
140
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> T;</div>
141
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
142
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
143
+ <div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ad0e9f1dd1cba235a699c2b710a888d06"> 80</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::addComplexConsForExt(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *D, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *S, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* szValue)</div>
144
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div>
145
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; assert(D &amp;&amp; S);</div>
146
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= getValueNode(D), vnS= getValueNode(S);</div>
147
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>(!vnD || !vnS)</div>
148
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span>;</div>
149
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
150
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; std::vector&lt;AccessPath&gt; fields;</div>
151
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
152
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">//Get the max possible size of the copy, unless it was provided.</span></div>
153
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; std::vector&lt;AccessPath&gt; srcFields;</div>
154
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; std::vector&lt;AccessPath&gt; dstFields;</div>
155
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* stype = getBaseTypeAndFlattenedFields(S, srcFields, szValue);</div>
156
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* dtype = getBaseTypeAndFlattenedFields(D, dstFields, szValue);</div>
157
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span>(srcFields.size() &gt; dstFields.size())</div>
158
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; fields = dstFields;</div>
159
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">else</span></div>
160
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; fields = srcFields;</div>
161
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
162
+ <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = fields.size();</div>
163
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
164
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">if</span> (fields.size() == 1 &amp;&amp; (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(D) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(S)))</div>
165
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div>
166
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = pag-&gt;addDummyValNode();</div>
167
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; addLoadEdge(vnD,dummy);</div>
168
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; addStoreEdge(dummy,vnS);</div>
169
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span>;</div>
170
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
171
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
172
+ <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">//For each field (i), add (Ti = *S + i) and (*D + i = Ti).</span></div>
173
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; sz; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
174
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div>
175
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
176
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(dtype),</div>
177
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantFieldIdx());</div>
178
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* sElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(stype),</div>
179
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantFieldIdx());</div>
180
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = getGepValVar(D,fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>],dElementType);</div>
181
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> sField = getGepValVar(S,fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>],sElementType);</div>
182
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = pag-&gt;addDummyValNode();</div>
183
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; addLoadEdge(sField,dummy);</div>
184
+ <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; addStoreEdge(dummy,dField);</div>
185
+ <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div>
186
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;}</div>
187
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
188
+ <div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a8b664a9d689562bd857f056e6e08c59b"> 126</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleExtCall(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfCallee)</div>
189
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;{</div>
190
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
191
+ <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfCall = SVFUtil::cast&lt;SVFCallInst&gt;(svfInst);</div>
192
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
193
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">isHeapAllocExtCallViaRet</a>(svfCall) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#ae62938f722543d6d7fc201b685be1abf">isStaticExtCall</a>(svfCall))</div>
194
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div>
195
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = pag-&gt;getValueNode(svfInst);</div>
196
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = pag-&gt;getObjectNode(svfInst);</div>
197
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; addAddrEdge(obj, val);</div>
198
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
199
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">isHeapAllocExtCallViaArg</a>(svfCall))</div>
204
200
  <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div>
205
- <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;The operand format of function operation is illegal!&quot;</span>);</div>
206
- <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; abort();</div>
207
- <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
208
- <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div>
209
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; </div>
210
- <div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a1865c0300cfa064c5455683e05100bd2"> 144</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::parseAtomaticOp(<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html">SVF::ExtAPI::Operand</a> &amp;atomaticOp, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfCall, std::map&lt;std::string, NodeID&gt; &amp;nodeIDMap)</div>
211
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;{</div>
212
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// Skip Rb_tree operation, which is handled in extFuncAtomaticOperation()</span></div>
213
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">if</span> (atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Rb_tree_ops)</div>
214
- <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">return</span>;</div>
215
- <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// Get src and dst node ID</span></div>
216
- <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (!atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acf56f7ccd727d97f3de1de30f86cc6fb">getSrcValue</a>().empty())</div>
217
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div>
218
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s = atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acf56f7ccd727d97f3de1de30f86cc6fb">getSrcValue</a>();</div>
219
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (nodeIDMap.find(s) != nodeIDMap.end())</div>
220
- <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ab0e1b9953acf05220df3337df55fbe95">setSrcID</a>(nodeIDMap[s]);</div>
221
- <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">else</span></div>
222
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div>
223
- <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId = getExtID(atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>(), atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acf56f7ccd727d97f3de1de30f86cc6fb">getSrcValue</a>(), svfCall);</div>
224
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ab0e1b9953acf05220df3337df55fbe95">setSrcID</a>(srcId);</div>
225
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; nodeIDMap[s] = srcId;</div>
226
- <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
227
- <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div>
228
- <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">else</span></div>
229
- <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;The &#39;src&#39; operand cannot be empty.&quot;</span>);</div>
230
- <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
231
- <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">if</span> (!atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acb1ed4536708a8d254b045529ba8205e">getDstValue</a>().empty())</div>
232
- <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; {</div>
233
- <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s = atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acb1ed4536708a8d254b045529ba8205e">getDstValue</a>();</div>
234
- <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (nodeIDMap.find(s) != nodeIDMap.end())</div>
235
- <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ac55f2f1e2618664fa1997f998a6c52d5">setDstID</a>(nodeIDMap[s]);</div>
236
- <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">else</span></div>
237
- <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div>
238
- <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = getExtID(atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>(), atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acb1ed4536708a8d254b045529ba8205e">getDstValue</a>(), svfCall);</div>
239
- <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ac55f2f1e2618664fa1997f998a6c52d5">setDstID</a>(dstId);</div>
240
- <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; nodeIDMap[s] = dstId;</div>
241
- <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; }</div>
242
- <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
243
- <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">else</span></div>
244
- <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;The &#39;dst&#39; operand cannot be empty.&quot;</span>);</div>
245
- <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
246
- <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">// Get offset or size</span></div>
247
- <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span> (!atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#af3fe2b022c36d228e9bc7050ea39118e">getOffsetOrSizeStr</a>().empty())</div>
248
- <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div>
249
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s = atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#af3fe2b022c36d228e9bc7050ea39118e">getOffsetOrSizeStr</a>();</div>
250
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (nodeIDMap.find(s) != nodeIDMap.end())</div>
251
- <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae768fbf44ca01515e3ef553c41d10c22">setOffsetOrSize</a>(nodeIDMap[s]);</div>
252
- <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">else</span></div>
253
- <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div>
254
- <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> offsetOrSize = getExtID(atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>(), atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#af3fe2b022c36d228e9bc7050ea39118e">getOffsetOrSizeStr</a>(), svfCall);</div>
255
- <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; atomaticOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae768fbf44ca01515e3ef553c41d10c22">setOffsetOrSize</a>(offsetOrSize);</div>
256
- <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; nodeIDMap[s] = offsetOrSize;</div>
257
- <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
258
- <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div>
259
- <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;}</div>
260
- <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
261
- <div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a082057b80e897227996b616c5fcb4b3e"> 195</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::parseExtFunctionOps(<a class="code" href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html">ExtAPI::ExtFunctionOps</a> &amp;extFunctionOps, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfCall)</div>
262
- <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;{</div>
263
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// CallStmt operation</span></div>
264
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">if</span> (extFunctionOps.<a class="code" href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html#a3d284974561e173762d173d4ae466817">getCallStmtNum</a>() != 0)</div>
265
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; handleExtCallStat(extFunctionOps, svfCall);</div>
266
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// Record all dummy nodes</span></div>
267
- <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; std::map&lt;std::string, NodeID&gt; nodeIDMap;</div>
268
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1ExtOperation.html">ExtAPI::ExtOperation</a>&amp; extOperation : extFunctionOps.<a class="code" href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html#a7922ddef3872e958d629b6d691b9cc4f">getOperations</a>())</div>
269
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div>
270
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// CondStmt operation</span></div>
271
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span>(extOperation.isConOp())</div>
272
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div>
273
- <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html">ExtAPI::Operand</a> &amp;atomaticOp : extOperation.getTrueBranchOperands())</div>
274
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; parseAtomaticOp(atomaticOp, svfCall, nodeIDMap);</div>
275
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html">ExtAPI::Operand</a> &amp;atomaticOp : extOperation.getFalseBranchOperands())</div>
276
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; parseAtomaticOp(atomaticOp, svfCall, nodeIDMap);</div>
277
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div>
278
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// General operation, e.g., &quot;AddrStmt&quot;, &quot;CopyStmt&quot;, ....</span></div>
279
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!extOperation.isCallOp())</div>
280
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; parseAtomaticOp(extOperation.getBasicOp(), svfCall, nodeIDMap);</div>
281
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
282
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;}</div>
283
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; </div>
284
- <div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac241e1fb02c2705120d726ca19505385"> 218</a></span>&#160;<a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* SVFIRBuilder::addSVFExtCallInst(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfInst, <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfCaller, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfCallee)</div>
285
- <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;{</div>
286
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfCall = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a7660f2d57d671c4826186e85eaff055d">getFunctionType</a>(), svfBB, <span class="keyword">false</span>, <span class="keyword">false</span>);</div>
287
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; svfCall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(<span class="stringliteral">&quot;ext_inst&quot;</span>);</div>
288
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;SVFValue2LLVMValue[svfCall] = <span class="keyword">nullptr</span>;</div>
289
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a6dd304f555d2d2388c4430e57b0d2b91">setCalledOperand</a>(svfCallee);</div>
290
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; setCurrentLocation(svfCall, svfBB);</div>
291
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; SymbolTableInfo::ValueToIDMapTy::iterator iter = pag-&gt;getSymbolInfo()-&gt;valSyms().find(svfCall);</div>
292
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (iter == pag-&gt;getSymbolInfo()-&gt;valSyms().end())</div>
293
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div>
294
- <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> <span class="keywordtype">id</span> = NodeIDAllocator::get()-&gt;allocateValueId();</div>
295
- <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; pag-&gt;getSymbolInfo()-&gt;valSyms().insert(std::make_pair(svfCall, <span class="keywordtype">id</span>));</div>
296
- <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#ad46a0423f8709692e1bb0f0fa5b1ca2f">DMemModel</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;create a new value sym &quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
297
- <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; pag-&gt;addValNode(svfCall, <span class="keywordtype">id</span>);</div>
298
- <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div>
299
- <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; svfCall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(svfCall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() + <span class="stringliteral">&quot;_&quot;</span> + std::to_string(pag-&gt;getValueNode(svfCall)));</div>
300
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
301
- <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; svfCallee-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ab8c7a9c79b0668aae604bbe54e34e46e">arg_size</a>(); i++)</div>
302
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div>
303
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfArg = addSVFExtInst(<span class="stringliteral">&quot;ext_inst&quot;</span>, svfInst, svfBB, ExtAPI::OperationType::Other, svfCallee-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a10d9481ae41dce4f266dad5e64fffcee">getArg</a>(i)-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>());</div>
304
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; svfArg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(svfArg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() + <span class="stringliteral">&quot;_&quot;</span> + std::to_string(pag-&gt;getValueNode(svfArg)));</div>
305
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#ac979b49b449b97b2a23f195cb107ec77">addArgument</a>(svfArg);</div>
306
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
307
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
308
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ac1b15d8f9c2499add8dbc889ae5cab65">addInstruction</a>(svfCall);</div>
309
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
310
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfCall);</div>
311
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; pag-&gt;addCallSite(callBlockNode);</div>
312
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; </div>
313
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span> (!svfCallee-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a97b0ad9fd31d7982f44a839605566347">isNotRetFunction</a>() &amp;&amp; !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfCallee))</div>
314
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; {</div>
315
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svfCallee);</div>
316
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = pag-&gt;getValueNode(svfCall);</div>
317
- <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfCall);</div>
318
- <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svfCallee);</div>
319
- <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(svfCall);</div>
320
- <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
321
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; pag-&gt;addCallSiteRets(retBlockNode,pag-&gt;getGNode(pag-&gt;getValueNode(svfCall)));</div>
322
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div>
323
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
324
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> svfCall;</div>
325
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;}</div>
326
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
327
- <div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ab0066684423d972c3d4e768fdb172c19"> 261</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::addSVFExtRetInst(<a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfCall, <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB, <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfCaller)</div>
328
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;{</div>
329
- <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* retInst = addSVFExtInst(<span class="stringliteral">&quot;ext_inst&quot;</span>, svfCall, svfBB, ExtAPI::OperationType::Return, <span class="keyword">nullptr</span>);</div>
330
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; retInst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(retInst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() + <span class="stringliteral">&quot;_&quot;</span> + std::to_string(pag-&gt;getValueNode(retInst)));</div>
331
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; setCurrentLocation(retInst, svfBB);</div>
332
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; </div>
333
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = getReturnNode(svfCaller);</div>
334
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = pag-&gt;getValueNode(svfCall);</div>
335
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(retInst);</div>
336
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="comment">//vnS may be null if src is a null ptr</span></div>
337
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; addPhiStmt(rnF,vnS,icfgNode);</div>
338
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;}</div>
339
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
340
- <div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a6f6a19eebec1a76b84bd6a2c5604026e"> 274</a></span>&#160;<a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* SVFIRBuilder::addSVFExtInst(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; instName, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfInst, <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB, <a class="code" href="classSVF_1_1ExtAPI.html#ac88fa9d671d9b701c072a454e6c30c0f">SVF::ExtAPI::OperationType</a> opType, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svfType)</div>
341
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;{</div>
342
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// Get new SVFInstruction type;</span></div>
343
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* ptType = <span class="keyword">nullptr</span>;</div>
344
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">if</span> (svfType != <span class="keyword">nullptr</span>)</div>
345
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; ptType = svfType;</div>
346
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">else</span></div>
347
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div>
348
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span> (opType == ExtAPI::OperationType::Addr</div>
349
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; || opType == ExtAPI::OperationType::Copy</div>
350
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; || opType == ExtAPI::OperationType::Load</div>
351
- <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; || opType == ExtAPI::OperationType::Gep)</div>
352
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
353
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; svfInst-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">arg_size</a>(); ++i)</div>
354
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (svfInst-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(i)-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
355
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {</div>
356
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; ptType = svfInst-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(i)-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>();</div>
357
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">break</span>;</div>
358
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div>
359
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div>
360
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">else</span></div>
361
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; ptType = svfInst-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>()-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>();</div>
362
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
363
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; </div>
364
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; assert(ptType != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;At least one argument of an external call is of pointer type!&quot;</span>);</div>
365
- <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>(ptType, svfBB, <span class="keyword">false</span>, <span class="keyword">false</span>);</div>
366
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; inst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(instName);</div>
367
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;SVFValue2LLVMValue[inst] = <span class="keyword">nullptr</span>;</div>
368
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ac1b15d8f9c2499add8dbc889ae5cab65">addInstruction</a>(inst);</div>
369
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; SymbolTableInfo::ValueToIDMapTy::iterator iter = pag-&gt;getSymbolInfo()-&gt;valSyms().find(inst);</div>
370
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (iter == pag-&gt;getSymbolInfo()-&gt;valSyms().end())</div>
371
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div>
372
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> <span class="keywordtype">id</span> = NodeIDAllocator::get()-&gt;allocateValueId();</div>
373
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; pag-&gt;getSymbolInfo()-&gt;valSyms().insert(std::make_pair(inst, <span class="keywordtype">id</span>));</div>
374
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#ad46a0423f8709692e1bb0f0fa5b1ca2f">DMemModel</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;create a new value sym &quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
375
- <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; pag-&gt;addValNode(inst, <span class="keywordtype">id</span>);</div>
376
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
377
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; inst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(inst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() + <span class="stringliteral">&quot;_&quot;</span> + std::to_string(pag-&gt;getValueNode(inst)));</div>
378
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">return</span> inst;</div>
379
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;}</div>
380
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; </div>
381
- <div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aa54b7593a2b66bd881006e505012dd50"> 315</a></span>&#160;<a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* SVFIRBuilder::extFuncInitialization(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfInst, <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfCaller)</div>
382
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;{</div>
383
- <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="comment">// Initialization, linking actual parameters with formal parameters,</span></div>
384
- <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">// adding basic blocks for external functions,</span></div>
385
- <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="comment">// and creating return edges (if the external function has a return value)</span></div>
386
- <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callSiteICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfInst);</div>
387
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* funEntryICFGNode = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svfCaller);</div>
388
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* funExitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svfCaller);</div>
389
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; svfCaller-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ab8c7a9c79b0668aae604bbe54e34e46e">arg_size</a>(); i++)</div>
390
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
391
- <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a> *AA = svfInst-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(i);</div>
392
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a> *FA = svfCaller-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a10d9481ae41dce4f266dad5e64fffcee">getArg</a>(i);</div>
393
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = pag-&gt;getValueNode(AA);</div>
394
- <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = pag-&gt;getValueNode(FA);</div>
395
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; addCallEdge(srcAA, dstFA, callSiteICFGNode, funEntryICFGNode);</div>
396
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; pag-&gt;addFunArgs(svfCaller,pag-&gt;getGNode(dstFA));</div>
397
- <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
398
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; </div>
399
- <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>(svfInst-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>()-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>(), svfCaller);</div>
400
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(<span class="stringliteral">&quot;ext_bb&quot;</span>);</div>
401
- <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;SVFValue2LLVMValue[svfBB] = <span class="keyword">nullptr</span>;</div>
402
- <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; </div>
403
- <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">if</span> (!svfCaller-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a97b0ad9fd31d7982f44a839605566347">isNotRetFunction</a>())</div>
404
- <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div>
405
- <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svfCaller);</div>
406
- <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = pag-&gt;getValueNode(svfInst);</div>
407
- <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; addRetEdge(srcret, dstrec,callSiteICFGNode, funExitICFGNode);</div>
408
- <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; pag-&gt;addFunRet(svfCaller,pag-&gt;getGNode(srcret));</div>
409
- <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div>
410
- <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> svfBB;</div>
411
- <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;}</div>
412
- <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; </div>
413
- <div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aaa6191fa37723bba849e6eae2decc7b9"> 347</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleExtCallStat(<a class="code" href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html">ExtAPI::ExtFunctionOps</a> &amp;extFunctionOps, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfInst)</div>
414
- <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;{</div>
415
- <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfCaller = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<span class="keyword">&gt;</span>(svfModule-&gt;getSVFFunction(svfInst-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#ab654651e3117e8480544615fb1574766">getCalledFunction</a>()-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()));</div>
416
- <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB = extFuncInitialization(svfInst, svfCaller);</div>
417
- <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="comment">// Map an operand to its new created SVFInstruction</span></div>
418
- <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; std::map&lt;std::string, SVFValue*&gt; operandToSVFValueMap;</div>
419
- <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1ExtOperation.html">ExtAPI::ExtOperation</a>&amp; extOperation : extFunctionOps.<a class="code" href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html#a7922ddef3872e958d629b6d691b9cc4f">getOperations</a>())</div>
420
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div>
421
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (extOperation.isCallOp())</div>
422
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
423
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// To create a CallInst for the callee</span></div>
424
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfCallee = svfModule-&gt;getSVFFunction(extOperation.getCalleeName());</div>
425
- <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfCall = addSVFExtCallInst(svfInst, svfBB, svfCaller, svfCallee);</div>
426
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; setCurrentLocation(svfCall, getCurrentBB());</div>
427
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; operandToSVFValueMap[svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()] = svfCall;</div>
428
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfCall);</div>
429
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; </div>
430
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; assert(extOperation.getCalleeOperands().size() &gt;= svfCallee-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ab8c7a9c79b0668aae604bbe54e34e46e">arg_size</a>()</div>
431
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; &amp;&amp; <span class="stringliteral">&quot;Number of arguments set in CallStmt in ExtAPI.json is inconsistent with the number of arguments required by the Callee?&quot;</span>);</div>
432
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// To parse the operations contained in ‘CallStmt’, obtain the NodeID, and add the callEdge</span></div>
433
- <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html">ExtAPI::Operand</a> &amp;operand : extOperation.getCalleeOperands())</div>
434
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div>
435
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> src = operand.getSrcValue();</div>
436
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> dst = operand.getDstValue();</div>
437
- <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// ReturnStmt</span></div>
438
- <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span> (operand.getType() == ExtAPI::OperationType::Return &amp;&amp; !svfCaller-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a97b0ad9fd31d7982f44a839605566347">isNotRetFunction</a>())</div>
439
- <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div>
440
- <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; addSVFExtRetInst(svfCall, svfBB, svfCaller);</div>
441
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">continue</span>;</div>
442
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div>
443
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; </div>
444
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">auto</span> getCallStmtOperands = [](<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; str) -&gt; std::pair&lt;std::string, std::string&gt;</div>
445
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div>
446
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordtype">size_t</span> pos = str.find(<span class="charliteral">&#39;_&#39;</span>);</div>
447
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; assert(pos != std::string::npos &amp;&amp; <span class="stringliteral">&quot;The operand format in CallStmt is incorrect! It should be either &#39;funName_Argi&#39; or &#39;funName_Ret&#39;!&quot;</span>);</div>
448
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">return</span> std::make_pair(str.substr(0, pos), str.substr(pos + 1));</div>
449
- <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; };</div>
450
- <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="comment">// &#39;src&#39; operand</span></div>
451
- <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">if</span> (src.find(<span class="charliteral">&#39;_&#39;</span>) != std::string::npos)</div>
452
- <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div>
453
- <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; std::pair&lt;std::string, std::string&gt; srcRet = getCallStmtOperands(src);</div>
454
- <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> argPos = ExtAPI::getExtAPI()-&gt;getNodeIDType(srcRet.second);</div>
455
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// operand like &quot;caller_Argi&quot;</span></div>
456
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">if</span> (svfCaller-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() == srcRet.first)</div>
457
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; {</div>
458
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; assert(argPos &gt;= 0 &amp;&amp; <span class="keyword">static_cast&lt;</span><a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a><span class="keyword">&gt;</span>(argPos) &lt; svfCaller-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ab8c7a9c79b0668aae604bbe54e34e46e">arg_size</a>() &amp;&amp; <span class="stringliteral">&quot;The argument index is out of bounds in CallStmt?&quot;</span>);</div>
459
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; operand.setSrcID(pag-&gt;getValueNode(svfCaller-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a10d9481ae41dce4f266dad5e64fffcee">getArg</a>(argPos)));</div>
460
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div>
461
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// operand like &quot;callee_Ret&quot;</span></div>
462
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">else</span></div>
463
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div>
464
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; assert(argPos == -1 &amp;&amp; <span class="stringliteral">&quot;The operand format in CallStmt is incorrect! It should be either &#39;funName_Argi&#39; or &#39;funName_Ret&#39;!&quot;</span>);</div>
465
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; assert(operandToSVFValueMap.find(srcRet.first) != operandToSVFValueMap.end() &amp;&amp; <span class="stringliteral">&quot;No created SVFCallInst in external functions?&quot;</span>);</div>
466
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; operand.setSrcID(pag-&gt;getValueNode(operandToSVFValueMap[srcRet.first]));</div>
467
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; }</div>
468
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</div>
469
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// operand like self-defined &quot;x&quot;, which should be created beforehand</span></div>
470
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">else</span></div>
471
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div>
472
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; assert(operandToSVFValueMap.find(src) != operandToSVFValueMap.end()</div>
473
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; &amp;&amp; <span class="stringliteral">&quot;Cannot find manual create ext inst, incorrect invocation order for external functions?&quot;</span>);</div>
474
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; operand.setSrcID(pag-&gt;getValueNode(operandToSVFValueMap[src]));</div>
475
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div>
476
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// &#39;dst&#39; operand</span></div>
477
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span> (dst.find(<span class="charliteral">&#39;_&#39;</span>) != std::string::npos)</div>
478
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; {</div>
479
- <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// operand like &quot;callee_Argi&quot;</span></div>
480
- <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; std::pair&lt;std::string, std::string&gt; dstRet = getCallStmtOperands(dst);</div>
481
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; assert(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() == dstRet.first &amp;&amp; <span class="stringliteral">&quot;The operand format of &#39;dst&#39; in external CallStmt is illegal!&quot;</span>);</div>
482
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> argPos = ExtAPI::getExtAPI()-&gt;getNodeIDType(dstRet.second);</div>
483
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; assert(argPos &gt;= 0 &amp;&amp; <span class="keyword">static_cast&lt;</span><a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a><span class="keyword">&gt;</span>(argPos) &lt; svfCallee-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ab8c7a9c79b0668aae604bbe54e34e46e">arg_size</a>() &amp;&amp; <span class="stringliteral">&quot;The argument index is out of bounds of callee in CallStmt?&quot;</span>);</div>
484
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// Create an new SVFInstruction for &quot;callee_Argi&quot;.</span></div>
485
- <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">if</span>(operandToSVFValueMap.find(dst) == operandToSVFValueMap.end())</div>
486
- <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; {</div>
487
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst = addSVFExtInst(<span class="stringliteral">&quot;ext_inst&quot;</span>, svfInst, svfBB, operand.<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>(), <span class="keyword">nullptr</span>);</div>
488
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; operand.setDstID(pag-&gt;getValueNode(inst));</div>
489
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; operandToSVFValueMap[dst] = inst;</div>
490
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; pag-&gt;addCallSiteArgs(callBlockNode,pag-&gt;getGNode(pag-&gt;getValueNode(inst)));</div>
491
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div>
492
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfCall);</div>
493
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svfCallee);</div>
494
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; addCallEdge(operand.getDstID(), pag-&gt;getValueNode(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a10d9481ae41dce4f266dad5e64fffcee">getArg</a>(argPos)), icfgNode, entry);</div>
495
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div>
496
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">else</span></div>
497
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div>
498
- <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// operand like self-defined &quot;x&quot;, if there are no SVFInstructions for &#39;x&#39;, create an new SVFInstruction.</span></div>
499
- <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst = addSVFExtInst(dst, svfInst, svfBB, operand.<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>(), <span class="keyword">nullptr</span>);</div>
500
- <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; operand.setDstID(pag-&gt;getValueNode(inst));</div>
501
- <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; operandToSVFValueMap[dst] = inst;</div>
502
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div>
503
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div>
504
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div>
505
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div>
506
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; svfCaller-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a0d5031bd11b6372803082111ec2cb4f6">addBasicBlock</a>(svfBB);</div>
507
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;}</div>
508
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; </div>
509
- <div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a33321283ca9940fd83117321b8589328"> 443</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::extFuncAtomaticOperation(<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html">ExtAPI::Operand</a>&amp; atomicOp, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfCall)</div>
510
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;{</div>
511
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">if</span> (atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Addr)</div>
512
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div>
513
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">if</span> (!atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acf56f7ccd727d97f3de1de30f86cc6fb">getSrcValue</a>().empty() &amp;&amp; !atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acb1ed4536708a8d254b045529ba8205e">getDstValue</a>().empty())</div>
514
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; addAddrEdge(atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a672e8dd7a153def307b566ad65724230">getSrcID</a>(), atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a400b778765605f10be2b01b21ef3d129">getDstID</a>());</div>
515
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">else</span></div>
516
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;We need two valid NodeIDs to add an Addr edge&quot;</span>);</div>
517
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
518
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Copy)</div>
519
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div>
520
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">if</span> (!atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acf56f7ccd727d97f3de1de30f86cc6fb">getSrcValue</a>().empty() &amp;&amp; !atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acb1ed4536708a8d254b045529ba8205e">getDstValue</a>().empty())</div>
521
- <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; addCopyEdge(atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a672e8dd7a153def307b566ad65724230">getSrcID</a>(), atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a400b778765605f10be2b01b21ef3d129">getDstID</a>());</div>
522
- <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">else</span></div>
523
- <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;We need two valid NodeIDs to add a Copy edge&quot;</span>);</div>
524
- <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div>
525
- <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Load)</div>
526
- <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; {</div>
527
- <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">if</span> (!atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acf56f7ccd727d97f3de1de30f86cc6fb">getSrcValue</a>().empty() &amp;&amp; !atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acb1ed4536708a8d254b045529ba8205e">getDstValue</a>().empty())</div>
528
- <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; addLoadEdge(atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a672e8dd7a153def307b566ad65724230">getSrcID</a>(), atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a400b778765605f10be2b01b21ef3d129">getDstID</a>());</div>
529
- <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">else</span></div>
530
- <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;We need two valid NodeIDs to add a Load edge&quot;</span>);</div>
531
- <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div>
532
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Store)</div>
533
- <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; {</div>
534
- <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">if</span> (!atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acf56f7ccd727d97f3de1de30f86cc6fb">getSrcValue</a>().empty() &amp;&amp; !atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acb1ed4536708a8d254b045529ba8205e">getDstValue</a>().empty())</div>
535
- <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; addStoreEdge(atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a672e8dd7a153def307b566ad65724230">getSrcID</a>(), atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a400b778765605f10be2b01b21ef3d129">getDstID</a>());</div>
536
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">else</span></div>
537
- <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;We need two valid NodeIDs to add a Store edge&quot;</span>);</div>
538
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div>
539
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Gep)</div>
540
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div>
541
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">if</span> (!atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acf56f7ccd727d97f3de1de30f86cc6fb">getSrcValue</a>().empty() &amp;&amp; !atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#acb1ed4536708a8d254b045529ba8205e">getDstValue</a>().empty() &amp;&amp; !atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#af3fe2b022c36d228e9bc7050ea39118e">getOffsetOrSizeStr</a>().empty())</div>
542
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; {</div>
543
- <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a88ced5673e794a9dbc486cc5b15d1932">getOffsetOrSize</a>());</div>
544
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; addNormalGepEdge(atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a672e8dd7a153def307b566ad65724230">getSrcID</a>(), atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#a400b778765605f10be2b01b21ef3d129">getDstID</a>(), ap);</div>
545
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div>
546
- <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">else</span></div>
547
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;We need two valid NodeIDs and an offset to add a Gep edge&quot;</span>);</div>
548
- <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div>
549
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Return)</div>
550
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">return</span>;</div>
551
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Memset_like)</div>
552
- <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; {</div>
553
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="comment">// this is for memset(void *str, int c, size_t n)</span></div>
554
- <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="comment">// which copies the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str</span></div>
555
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="comment">// const SVFConstantInt* arg2 = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(svfCall-&gt;getArgOperand(op.getOperands()[2]));</span></div>
556
- <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> argId = pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(0));</div>
557
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; std::vector&lt;AccessPath&gt; dstFields = pag-&gt;getTypeLocSetsMap(argId).second;</div>
558
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = dstFields.size();</div>
559
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>* arg2 = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(2)))</div>
560
- <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; sz = (dstFields.size() &gt; <span class="keyword">static_cast&lt;</span><a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a><span class="keyword">&gt;</span>(arg2-&gt;getSExtValue())) ? arg2-&gt;getSExtValue() : dstFields.size();</div>
561
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">//For each field (i), add store edge *(arg0 + i) = arg1</span></div>
562
- <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; sz; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
563
- <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; {</div>
564
- <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(pag-&gt;getTypeLocSetsMap(argId).first, dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantFieldIdx());</div>
565
- <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = getGepValVar(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(0), dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>], dElementType);</div>
566
- <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; addStoreEdge(pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(1)),dField);</div>
567
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div>
568
- <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span>(svfCall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
569
- <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; addCopyEdge(pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(0)), pag-&gt;getValueNode(svfCall));</div>
570
- <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; }</div>
571
- <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Memcpy_like)</div>
572
- <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; {</div>
573
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">if</span>(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">arg_size</a>() == 3)</div>
574
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; addComplexConsForExt(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(0), svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(1), svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(2));</div>
575
- <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">else</span></div>
576
- <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; addComplexConsForExt(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(0), svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(1), <span class="keyword">nullptr</span>);</div>
577
- <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div>
578
- <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (atomicOp.<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">getType</a>() == ExtAPI::OperationType::Rb_tree_ops)</div>
579
- <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div>
580
- <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; assert(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">arg_size</a>() == 4 &amp;&amp; <span class="stringliteral">&quot;_Rb_tree_insert_and_rebalance should have 4 arguments.\n&quot;</span>);</div>
581
- <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; </div>
582
- <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// We have vArg3 points to the entry of _Rb_tree_node_base { color; parent; left; right; }.</span></div>
583
- <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="comment">// Now we calculate the offset from base to vArg3</span></div>
584
- <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg3 = pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(3));</div>
585
- <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = getAccessPathFromBaseNode(vnArg3).getConstantFieldIdx();</div>
586
- <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; </div>
587
- <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// We get all flattened fields of base</span></div>
588
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; vector&lt;AccessPath&gt; fields = pag-&gt;getTypeLocSetsMap(vnArg3).second;</div>
589
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; </div>
590
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="comment">// We summarize the side effects: arg3-&gt;parent = arg1, arg3-&gt;left = arg1, arg3-&gt;right = arg1</span></div>
591
- <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// Note that arg0 is aligned with &quot;offset&quot;.</span></div>
592
- <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> i = <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 1; i &lt;= <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 3; ++i)</div>
593
- <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; {</div>
594
- <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">if</span>((<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)i &gt;= fields.size())</div>
595
- <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">break</span>;</div>
596
- <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(pag-&gt;getTypeLocSetsMap(vnArg3).first,</div>
597
- <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; fields[i].getConstantFieldIdx());</div>
598
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = getGepValVar(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(3), fields[i], elementType);</div>
599
- <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(1));</div>
600
- <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div>
601
- <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; addStoreEdge(vnS,vnD);</div>
602
- <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div>
603
- <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div>
604
- <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// default</span></div>
605
- <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="comment">// illegal function operation of external function</span></div>
606
- <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">else</span></div>
607
- <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div>
608
- <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;new type of SVFStmt for external calls?&quot;</span>);</div>
609
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; }</div>
610
- <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;}</div>
611
- <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; </div>
612
- <div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a72df6ed8720f609607c8a00a254d881f"> 549</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleExtCall(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfCallee)</div>
613
- <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;{</div>
614
- <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfCall = SVFUtil::cast&lt;SVFCallInst&gt;(svfInst);</div>
615
- <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; </div>
616
- <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a61ed4bb80d88b0f8dbc02535c224fdfb">isHeapAllocOrStaticExtCall</a>(svfInst))</div>
617
- <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div>
618
- <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="comment">// case 1: ret = new obj</span></div>
619
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">isHeapAllocExtCallViaRet</a>(svfInst) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#ae62938f722543d6d7fc201b685be1abf">isStaticExtCall</a>(svfInst))</div>
620
- <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; {</div>
621
- <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = pag-&gt;getValueNode(svfInst);</div>
622
- <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = pag-&gt;getObjectNode(svfInst);</div>
623
- <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; addAddrEdge(obj, val);</div>
624
- <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; }</div>
625
- <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="comment">// case 2: *arg = new obj</span></div>
626
- <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">else</span></div>
627
- <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; {</div>
628
- <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; assert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">isHeapAllocExtCallViaArg</a>(svfInst) &amp;&amp; <span class="stringliteral">&quot;Must be heap alloc call via arg.&quot;</span>);</div>
629
- <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arg_pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">getHeapAllocHoldingArgPosition</a>(svfCallee);</div>
630
- <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg = svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(arg_pos);</div>
631
- <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">if</span> (arg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
632
- <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div>
633
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = pag-&gt;getValueNode(arg);</div>
634
- <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = pag-&gt;addDummyValNode();</div>
635
- <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = pag-&gt;addDummyObjNode(arg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>());</div>
636
- <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">if</span> (vnArg &amp;&amp; dummy &amp;&amp; obj)</div>
637
- <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; {</div>
638
- <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; addAddrEdge(obj, dummy);</div>
639
- <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; addStoreEdge(dummy, vnArg);</div>
640
- <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div>
641
- <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div>
642
- <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">else</span></div>
643
- <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; {</div>
644
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;Arg receiving new object must be pointer type&quot;</span>);</div>
645
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; }</div>
646
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div>
647
- <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div>
648
- <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">else</span></div>
649
- <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; {</div>
650
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfCallee))</div>
651
- <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div>
652
- <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html">ExtAPI::ExtFunctionOps</a> extFunctionOps = ExtAPI::getExtAPI()-&gt;getExtFunctionOps(svfCallee);</div>
653
- <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">if</span> (extFunctionOps.<a class="code" href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html#a7922ddef3872e958d629b6d691b9cc4f">getOperations</a>().size() == 0)</div>
654
- <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; {</div>
655
- <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div>
656
- <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; std::stringstream rawstr(str);</div>
657
- <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;function &quot;</span> &lt;&lt; svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() &lt;&lt; <span class="stringliteral">&quot; not in the external function summary ExtAPI.json file&quot;</span>;</div>
658
- <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(rawstr.str());</div>
659
- <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; }</div>
660
- <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">else</span></div>
661
- <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; {</div>
662
- <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; parseExtFunctionOps(extFunctionOps, svfCall);</div>
663
- <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1ExtOperation.html">ExtAPI::ExtOperation</a> op : extFunctionOps.<a class="code" href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html#a7922ddef3872e958d629b6d691b9cc4f">getOperations</a>())</div>
664
- <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div>
665
- <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">if</span> (op.isCallOp())</div>
666
- <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html">ExtAPI::Operand</a> atomicOp : op.getCalleeOperands())</div>
667
- <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; extFuncAtomaticOperation(atomicOp, svfCall);</div>
668
- <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(op.isConOp())</div>
669
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; {</div>
670
- <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html">ExtAPI::Operand</a> atomicOp : op.getTrueBranchOperands())</div>
671
- <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; extFuncAtomaticOperation(atomicOp, svfCall);</div>
672
- <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html">ExtAPI::Operand</a> atomicOp : op.getFalseBranchOperands())</div>
673
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; extFuncAtomaticOperation(atomicOp, svfCall);</div>
674
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; }</div>
675
- <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">else</span></div>
676
- <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; {</div>
677
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1Operand.html">ExtAPI::Operand</a> atomicOp = op.getBasicOp();</div>
678
- <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; extFuncAtomaticOperation(atomicOp, svfCall);</div>
679
- <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div>
680
- <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; }</div>
681
- <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; }</div>
682
- <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; }</div>
683
- <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; </div>
684
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">isThreadForkCall</a>(svfInst))</div>
685
- <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; {</div>
686
- <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* forkedFun = SVFUtil::dyn_cast&lt;SVFFunction&gt;(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2790c5289dad1d6e80f7597a2ea458ab">getForkedFun</a>(svfInst)))</div>
687
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; {</div>
688
- <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; forkedFun = forkedFun-&gt;getDefFunForMultipleModule();</div>
689
- <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8c64663b564eb7c399013389920ab500">getActualParmAtForkSite</a>(svfInst);</div>
690
- <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; assert((forkedFun-&gt;arg_size() &lt;= 2) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of start routine should be one&quot;</span>);</div>
691
- <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordflow">if</span> (forkedFun-&gt;arg_size() &lt;= 2 &amp;&amp; forkedFun-&gt;arg_size() &gt;= 1)</div>
692
- <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; {</div>
693
- <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = forkedFun-&gt;getArg(0);</div>
694
- <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (actualParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() &amp;&amp; formalParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
695
- <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div>
696
- <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfInst);</div>
697
- <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(forkedFun);</div>
698
- <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; addThreadForkEdge(pag-&gt;getValueNode(actualParm), pag-&gt;getValueNode(formalParm), icfgNode, entry);</div>
699
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div>
700
- <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div>
701
- <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; }</div>
702
- <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">else</span></div>
703
- <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; {</div>
704
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; }</div>
705
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div>
706
- <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; </div>
707
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">isHareParForCall</a>(svfInst))</div>
708
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div>
709
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* taskFunc = SVFUtil::dyn_cast&lt;SVFFunction&gt;(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5cee46f58bdab3f9b1c698e97290152f">getTaskFuncAtHareParForSite</a>(svfInst)))</div>
710
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; {</div>
711
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; assert((taskFunc-&gt;arg_size() == 3) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of hare_parallel_for&#39;s task routine should be 3&quot;</span>);</div>
712
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a2f74db48793a0db76c000ffecf9e1bd2">getTaskDataAtHareParForSite</a>(svfInst);</div>
713
- <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = taskFunc-&gt;getArg(0);</div>
714
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">if</span> (actualParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() &amp;&amp; formalParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
715
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div>
716
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfInst);</div>
717
- <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(taskFunc);</div>
718
- <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; addThreadForkEdge(pag-&gt;getValueNode(actualParm), pag-&gt;getValueNode(formalParm), icfgNode, entry);</div>
719
- <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; }</div>
720
- <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; }</div>
721
- <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">else</span></div>
722
- <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div>
723
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; }</div>
724
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; }</div>
725
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; </div>
726
- <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div>
727
- <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;}</div>
201
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arg_pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">getHeapAllocHoldingArgPosition</a>(svfCallee);</div>
202
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg = svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(arg_pos);</div>
203
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> (arg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
204
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
205
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = pag-&gt;getValueNode(arg);</div>
206
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = pag-&gt;addDummyValNode();</div>
207
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = pag-&gt;addDummyObjNode(arg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>());</div>
208
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (vnArg &amp;&amp; dummy &amp;&amp; obj)</div>
209
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div>
210
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; addAddrEdge(obj, dummy);</div>
211
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; addStoreEdge(dummy, vnArg);</div>
212
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div>
213
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
214
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">else</span></div>
215
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div>
216
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;Arg receiving new object must be pointer type&quot;</span>);</div>
217
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
218
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
219
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a688bd5e1bf36b3e75bfcea9388871dc4">isMemcpyExtFun</a>(svfCallee))</div>
220
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
221
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">if</span>(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().find(<span class="stringliteral">&quot;iconv&quot;</span>) != std::string::npos)</div>
222
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; addComplexConsForExt(cs-&gt;getArgOperand(3), cs-&gt;getArgOperand(1), <span class="keyword">nullptr</span>);</div>
223
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().find(<span class="stringliteral">&quot;bcopy&quot;</span>) != std::string::npos)</div>
224
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; addComplexConsForExt(cs-&gt;getArgOperand(1), cs-&gt;getArgOperand(0), cs-&gt;getArgOperand(2));</div>
225
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">if</span>(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">arg_size</a>() == 3)</div>
226
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; addComplexConsForExt(cs-&gt;getArgOperand(0), cs-&gt;getArgOperand(1), cs-&gt;getArgOperand(2));</div>
227
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">else</span></div>
228
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; addComplexConsForExt(cs-&gt;getArgOperand(0), cs-&gt;getArgOperand(1), <span class="keyword">nullptr</span>);</div>
229
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(cs-&gt;getType()))</div>
230
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; addCopyEdge(getValueNode(cs-&gt;getArgOperand(0)), getValueNode(cs));</div>
231
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div>
232
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a54098ea73555caa682287f8e3c9e8fcb">isMemsetExtFun</a>(svfCallee))</div>
233
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div>
234
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// this is for memset(void *str, int c, size_t n)</span></div>
235
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// which copies the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str</span></div>
236
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; std::vector&lt;AccessPath&gt; dstFields;</div>
237
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *dtype = getBaseTypeAndFlattenedFields(cs-&gt;getArgOperand(0), dstFields, cs-&gt;getArgOperand(2));</div>
238
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = dstFields.size();</div>
239
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="comment">//For each field (i), add store edge *(arg0 + i) = arg1</span></div>
240
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; sz; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
241
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div>
242
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
243
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(dtype), dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantFieldIdx());</div>
244
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = getGepValVar(cs-&gt;getArgOperand(0), dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>], dElementType);</div>
245
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; addStoreEdge(getValueNode(cs-&gt;getArgOperand(1)),dField);</div>
246
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div>
247
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(cs-&gt;getType()))</div>
248
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; addCopyEdge(getValueNode(cs-&gt;getArgOperand(0)), getValueNode(cs));</div>
249
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
250
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().find(<span class="stringliteral">&quot;_ZNSt5arrayIPK1ALm2EE4backEv&quot;</span>) != std::string::npos)</div>
251
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div>
252
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = pag-&gt;addDummyValNode();</div>
253
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap1(0);</div>
254
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; addNormalGepEdge(getValueNode(cs-&gt;getArgOperand(0)), dummy, ap1);</div>
255
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap2(0);</div>
256
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; addNormalGepEdge(dummy, getValueNode(cs), ap2);</div>
257
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
258
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().compare(<span class="stringliteral">&quot;dlsym&quot;</span>) == 0)</div>
259
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div>
260
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = cs-&gt;getArgOperand(1);</div>
261
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(src))</div>
262
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; src = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a07bd47ccfd02c5a2a6db26b537b2184f">stripConstantCasts</a>(gep-&gt;getPointerOperand());</div>
263
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
264
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">auto</span> getHookFn = [](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src)-&gt;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>*</div>
265
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div>
266
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;GlobalVariable&gt;(src))</div>
267
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
268
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
269
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keyword">auto</span> *glob = SVFUtil::cast&lt;GlobalVariable&gt;(src);</div>
270
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span> (!glob-&gt;hasInitializer() || !SVFUtil::isa&lt;ConstantDataArray&gt;(glob-&gt;getInitializer()))</div>
271
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
272
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; </div>
273
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">auto</span> *constarray = SVFUtil::cast&lt;ConstantDataArray&gt;(glob-&gt;getInitializer());</div>
274
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a76b0d0ac69c170838cfc8ee26f4518a0">LLVMUtil::getProgFunction</a>(constarray-&gt;getAsCString().str());</div>
275
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; };</div>
276
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
277
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fn = getHookFn(src))</div>
278
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div>
279
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = getValueNode(fn);</div>
280
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; addCopyEdge(srcNode, getValueNode(cs));</div>
281
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div>
282
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div>
283
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(svfCallee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().find(<span class="stringliteral">&quot;_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_&quot;</span>) != std::string::npos)</div>
284
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div>
285
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; assert(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">arg_size</a>() == 4 &amp;&amp; <span class="stringliteral">&quot;_Rb_tree_insert_and_rebalance should have 4 arguments.\n&quot;</span>);</div>
286
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; </div>
287
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// We have vArg3 points to the entry of _Rb_tree_node_base { color; parent; left; right; }.</span></div>
288
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// Now we calculate the offset from base to vArg3</span></div>
289
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg3 = pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(3));</div>
290
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = getAccessPathFromBaseNode(vnArg3).getConstantFieldIdx();</div>
291
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
292
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// We get all flattened fields of base</span></div>
293
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; vector&lt;AccessPath&gt; fields = pag-&gt;getTypeLocSetsMap(vnArg3).second;</div>
294
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; </div>
295
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// We summarize the side effects: arg3-&gt;parent = arg1, arg3-&gt;left = arg1, arg3-&gt;right = arg1</span></div>
296
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// Note that arg0 is aligned with &quot;offset&quot;.</span></div>
297
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> i = <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 1; i &lt;= <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 3; ++i)</div>
298
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div>
299
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span>((<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)i &gt;= fields.size())</div>
300
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">break</span>;</div>
301
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType = pag-&gt;getSymbolInfo()-&gt;getFlatternedElemType(pag-&gt;getTypeLocSetsMap(vnArg3).first,</div>
302
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; fields[i].getConstantFieldIdx());</div>
303
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = getGepValVar(cs-&gt;getArgOperand(3), fields[i], elementType);</div>
304
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = pag-&gt;getValueNode(svfCall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(1));</div>
305
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div>
306
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; addStoreEdge(vnS,vnD);</div>
307
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div>
308
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div>
309
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
310
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">isThreadForkCall</a>(svfInst))</div>
311
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; {</div>
312
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* forkedFun = SVFUtil::dyn_cast&lt;SVFFunction&gt;(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2790c5289dad1d6e80f7597a2ea458ab">getForkedFun</a>(svfInst)))</div>
313
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; {</div>
314
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; forkedFun = forkedFun-&gt;getDefFunForMultipleModule();</div>
315
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8c64663b564eb7c399013389920ab500">getActualParmAtForkSite</a>(svfInst);</div>
316
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; assert((forkedFun-&gt;arg_size() &lt;= 2) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of start routine should be one&quot;</span>);</div>
317
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">if</span> (forkedFun-&gt;arg_size() &lt;= 2 &amp;&amp; forkedFun-&gt;arg_size() &gt;= 1)</div>
318
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div>
319
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = forkedFun-&gt;getArg(0);</div>
320
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (actualParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() &amp;&amp; formalParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
321
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div>
322
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfInst);</div>
323
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(forkedFun);</div>
324
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; addThreadForkEdge(pag-&gt;getValueNode(actualParm), pag-&gt;getValueNode(formalParm), icfgNode, entry);</div>
325
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div>
326
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div>
327
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div>
328
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">else</span></div>
329
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div>
330
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
331
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
332
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; </div>
333
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">isHareParForCall</a>(svfInst))</div>
334
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div>
335
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* taskFunc = SVFUtil::dyn_cast&lt;SVFFunction&gt;(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5cee46f58bdab3f9b1c698e97290152f">getTaskFuncAtHareParForSite</a>(svfInst)))</div>
336
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div>
337
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; assert((taskFunc-&gt;arg_size() == 3) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of hare_parallel_for&#39;s task routine should be 3&quot;</span>);</div>
338
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a2f74db48793a0db76c000ffecf9e1bd2">getTaskDataAtHareParForSite</a>(svfInst);</div>
339
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = taskFunc-&gt;getArg(0);</div>
340
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span> (actualParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() &amp;&amp; formalParm-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
341
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div>
342
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfInst);</div>
343
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(taskFunc);</div>
344
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; addThreadForkEdge(pag-&gt;getValueNode(actualParm), pag-&gt;getValueNode(formalParm), icfgNode, entry);</div>
345
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
346
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div>
347
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">else</span></div>
348
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div>
349
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div>
350
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
351
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; </div>
352
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div>
728
353
  </div><!-- fragment --></div><!-- contents -->
729
354
  <div class="ttc" id="anamespaceSVF_html_a5c4820681ef340339ddded756eb82ae1"><div class="ttname"><a href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">SVF::APOffset</a></div><div class="ttdeci">s64_t APOffset</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00061">SVFType.h:61</a></div></div>
730
- <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a3cbb4b4089c8b27d01da15f2d2f22e14"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">SVF::SVFCallInst::getArgOperand</a></div><div class="ttdeci">const SVFValue * getArgOperand(u32_t i) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00702">SVFValue.h:702</a></div></div>
731
- <div class="ttc" id="aSVFType_8h_html_ad46a0423f8709692e1bb0f0fa5b1ca2f"><div class="ttname"><a href="SVFType_8h.html#ad46a0423f8709692e1bb0f0fa5b1ca2f">DMemModel</a></div><div class="ttdeci">#define DMemModel</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00552">SVFType.h:552</a></div></div>
355
+ <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a3cbb4b4089c8b27d01da15f2d2f22e14"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">SVF::SVFCallInst::getArgOperand</a></div><div class="ttdeci">const SVFValue * getArgOperand(u32_t i) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00708">SVFValue.h:708</a></div></div>
732
356
  <div class="ttc" id="aclassSVF_1_1SVFValue_html_a2401b022638769f59f86ab424a189b6e"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">SVF::SVFValue::getName</a></div><div class="ttdeci">const std::string &amp; getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00216">SVFValue.h:216</a></div></div>
733
- <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a97b0ad9fd31d7982f44a839605566347"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a97b0ad9fd31d7982f44a839605566347">SVF::SVFFunction::isNotRetFunction</a></div><div class="ttdeci">bool isNotRetFunction() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00428">SVFValue.h:428</a></div></div>
734
- <div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html_ac1b15d8f9c2499add8dbc889ae5cab65"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html#ac1b15d8f9c2499add8dbc889ae5cab65">SVF::SVFBasicBlock::addInstruction</a></div><div class="ttdeci">void addInstruction(const SVFInstruction *inst)</div><div class="ttdoc">Function where this BasicBlock is.</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00502">SVFValue.h:502</a></div></div>
735
- <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a10d9481ae41dce4f266dad5e64fffcee"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a10d9481ae41dce4f266dad5e64fffcee">SVF::SVFFunction::getArg</a></div><div class="ttdeci">const SVFArgument * getArg(u32_t idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8cpp_source.html#l00148">SVFValue.cpp:148</a></div></div>
736
- <div class="ttc" id="aclassSVF_1_1SVFCallInst_html"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html">SVF::SVFCallInst</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00655">SVFValue.h:655</a></div></div>
737
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_ae266107bc7a98aee85b30e25bb8f0fc0"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#ae266107bc7a98aee85b30e25bb8f0fc0">SVF::ExtAPI::Operand::getType</a></div><div class="ttdeci">OperationType getType() const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00245">ExtAPI.h:245</a></div></div>
738
- <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a6dd304f555d2d2388c4430e57b0d2b91"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a6dd304f555d2d2388c4430e57b0d2b91">SVF::SVFCallInst::setCalledOperand</a></div><div class="ttdeci">void setCalledOperand(const SVFValue *v)</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00673">SVFValue.h:673</a></div></div>
357
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a688bd5e1bf36b3e75bfcea9388871dc4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a688bd5e1bf36b3e75bfcea9388871dc4">SVF::SVFUtil::isMemcpyExtFun</a></div><div class="ttdeci">bool isMemcpyExtFun(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00314">SVFUtil.h:314</a></div></div>
358
+ <div class="ttc" id="aclassSVF_1_1SVFCallInst_html"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html">SVF::SVFCallInst</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00661">SVFValue.h:661</a></div></div>
739
359
  <div class="ttc" id="aclassSVF_1_1FunEntryICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunEntryICFGNode.html">SVF::FunEntryICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00261">ICFGNode.h:261</a></div></div>
740
- <div class="ttc" id="aclassSVF_1_1RetICFGNode_html"><div class="ttname"><a href="classSVF_1_1RetICFGNode.html">SVF::RetICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00487">ICFGNode.h:487</a></div></div>
741
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html">SVF::ExtAPI::Operand</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00242">ExtAPI.h:242</a></div></div>
742
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a28fbb7cc51eb7e25d88f43e3eb1f30fb"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">SVF::SVFUtil::isHareParForCall</a></div><div class="ttdeci">bool isHareParForCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00552">SVFUtil.h:552</a></div></div>
743
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad56c48be3ba6ebb95416623256524097"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">SVF::LLVMUtil::getCallee</a></div><div class="ttdeci">const Function * getCallee(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00075">LLVMUtil.h:75</a></div></div>
360
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a28fbb7cc51eb7e25d88f43e3eb1f30fb"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">SVF::SVFUtil::isHareParForCall</a></div><div class="ttdeci">bool isHareParForCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00537">SVFUtil.h:537</a></div></div>
744
361
  <div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
745
- <div class="ttc" id="aclassSVF_1_1SVFValue_html_a8325774df9d65d78ef6a66fef59b9a97"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">SVF::SVFValue::setName</a></div><div class="ttdeci">void setName(const std::string &amp;n)</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00220">SVFValue.h:220</a></div></div>
746
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_acf56f7ccd727d97f3de1de30f86cc6fb"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#acf56f7ccd727d97f3de1de30f86cc6fb">SVF::ExtAPI::Operand::getSrcValue</a></div><div class="ttdeci">const std::string &amp; getSrcValue() const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00253">ExtAPI.h:253</a></div></div>
747
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1ExtFunctionOps_html_a7922ddef3872e958d629b6d691b9cc4f"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html#a7922ddef3872e958d629b6d691b9cc4f">SVF::ExtAPI::ExtFunctionOps::getOperations</a></div><div class="ttdeci">std::vector&lt; ExtOperation &gt; &amp; getOperations()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00420">ExtAPI.h:420</a></div></div>
748
- <div class="ttc" id="aclassSVF_1_1SVFFunction_html_ab8c7a9c79b0668aae604bbe54e34e46e"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ab8c7a9c79b0668aae604bbe54e34e46e">SVF::SVFFunction::arg_size</a></div><div class="ttdeci">u32_t arg_size() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8cpp_source.html#l00143">SVFValue.cpp:143</a></div></div>
749
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1ExtFunctionOps_html"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html">SVF::ExtAPI::ExtFunctionOps</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00407">ExtAPI.h:407</a></div></div>
750
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_ac55f2f1e2618664fa1997f998a6c52d5"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#ac55f2f1e2618664fa1997f998a6c52d5">SVF::ExtAPI::Operand::setDstID</a></div><div class="ttdeci">void setDstID(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00281">ExtAPI.h:281</a></div></div>
751
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab2064cb70c76f399ce115f2621adea35"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVF::SVFUtil::isHeapAllocExtCallViaRet</a></div><div class="ttdeci">bool isHeapAllocExtCallViaRet(const CallSite cs)</div><div class="ttdoc">interfaces to be used externally</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00454">SVFUtil.h:454</a></div></div>
362
+ <div class="ttc" id="anamespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00094">BasicTypes.h:94</a></div></div>
363
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a07bd47ccfd02c5a2a6db26b537b2184f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a07bd47ccfd02c5a2a6db26b537b2184f">SVF::LLVMUtil::stripConstantCasts</a></div><div class="ttdeci">const Value * stripConstantCasts(const Value *val)</div><div class="ttdoc">Strip off the constant casts.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00222">LLVMUtil.cpp:222</a></div></div>
364
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a5f0bd932f3129a9c565f3a09711f7b99"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">SVF::LLVMModuleSet::getSVFType</a></div><div class="ttdeci">SVFType * getSVFType(const Type *T)</div><div class="ttdoc">Get or create SVFType and typeinfo.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01159">LLVMModule.cpp:1159</a></div></div>
365
+ <div class="ttc" id="anamespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00080">BasicTypes.h:80</a></div></div>
366
+ <div class="ttc" id="aclassSVF_1_1AccessPath_html_a2358a8194b5e2c4bcbb5218dee7fcbcd"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a2358a8194b5e2c4bcbb5218dee7fcbcd">SVF::AccessPath::addOffsetVarAndGepTypePair</a></div><div class="ttdeci">bool addOffsetVarAndGepTypePair(const SVFVar *var, const SVFType *gepIterType)</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00042">AccessPath.cpp:42</a></div></div>
367
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab2064cb70c76f399ce115f2621adea35"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVF::SVFUtil::isHeapAllocExtCallViaRet</a></div><div class="ttdeci">bool isHeapAllocExtCallViaRet(const CallSite cs)</div><div class="ttdoc">interfaces to be used externally</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00450">SVFUtil.h:450</a></div></div>
752
368
  <div class="ttc" id="aclassSVF_1_1SVFValue_html_a11f2d9b6e969ede6fca2c204cc15b821"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">SVF::SVFValue::getType</a></div><div class="ttdeci">virtual const SVFType * getType() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00229">SVFValue.h:229</a></div></div>
753
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1ExtOperation_html"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1ExtOperation.html">SVF::ExtAPI::ExtOperation</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00311">ExtAPI.h:311</a></div></div>
754
- <div class="ttc" id="aclassSVF_1_1ICFGNode_html"><div class="ttname"><a href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00054">ICFGNode.h:54</a></div></div>
755
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a8c64663b564eb7c399013389920ab500"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8c64663b564eb7c399013389920ab500">SVF::SVFUtil::getActualParmAtForkSite</a></div><div class="ttdeci">const SVFValue * getActualParmAtForkSite(const CallSite cs)</div><div class="ttdoc">Return sole argument of the thread routine.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00624">SVFUtil.h:624</a></div></div>
369
+ <div class="ttc" id="anamespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00083">BasicTypes.h:83</a></div></div>
370
+ <div class="ttc" id="anamespaceSVF_html_affba423b674a0aba723e33101826e297"><div class="ttname"><a href="namespaceSVF.html#affba423b674a0aba723e33101826e297">SVF::LLVMContext</a></div><div class="ttdeci">llvm::LLVMContext LLVMContext</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00068">BasicTypes.h:68</a></div></div>
371
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a8c64663b564eb7c399013389920ab500"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8c64663b564eb7c399013389920ab500">SVF::SVFUtil::getActualParmAtForkSite</a></div><div class="ttdeci">const SVFValue * getActualParmAtForkSite(const CallSite cs)</div><div class="ttdoc">Return sole argument of the thread routine.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00609">SVFUtil.h:609</a></div></div>
372
+ <div class="ttc" id="anamespaceSVF_html_a1f4624771922dc8c2447ad7433588c73"><div class="ttname"><a href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">SVF::CallBase</a></div><div class="ttdeci">llvm::CallBase CallBase</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00144">BasicTypes.h:144</a></div></div>
373
+ <div class="ttc" id="anamespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00081">BasicTypes.h:81</a></div></div>
756
374
  <div class="ttc" id="acJSON_8h_html_a750b5d744c39a06bfb13e6eb010e35d0"><div class="ttname"><a href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00170">cJSON.h:170</a></div></div>
757
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ae62938f722543d6d7fc201b685be1abf"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ae62938f722543d6d7fc201b685be1abf">SVF::SVFUtil::isStaticExtCall</a></div><div class="ttdeci">bool isStaticExtCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00512">SVFUtil.h:512</a></div></div>
758
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a2f74db48793a0db76c000ffecf9e1bd2"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2f74db48793a0db76c000ffecf9e1bd2">SVF::SVFUtil::getTaskDataAtHareParForSite</a></div><div class="ttdeci">const SVFValue * getTaskDataAtHareParForSite(const CallSite cs)</div><div class="ttdoc">Return the task data argument of the parallel_for rountine.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00648">SVFUtil.h:648</a></div></div>
759
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_a88ced5673e794a9dbc486cc5b15d1932"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#a88ced5673e794a9dbc486cc5b15d1932">SVF::ExtAPI::Operand::getOffsetOrSize</a></div><div class="ttdeci">u32_t getOffsetOrSize() const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00293">ExtAPI.h:293</a></div></div>
760
- <div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html">SVF::SVFBasicBlock</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00484">SVFValue.h:484</a></div></div>
375
+ <div class="ttc" id="aSVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
376
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ae62938f722543d6d7fc201b685be1abf"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ae62938f722543d6d7fc201b685be1abf">SVF::SVFUtil::isStaticExtCall</a></div><div class="ttdeci">bool isStaticExtCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00497">SVFUtil.h:497</a></div></div>
377
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a2f74db48793a0db76c000ffecf9e1bd2"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2f74db48793a0db76c000ffecf9e1bd2">SVF::SVFUtil::getTaskDataAtHareParForSite</a></div><div class="ttdeci">const SVFValue * getTaskDataAtHareParForSite(const CallSite cs)</div><div class="ttdoc">Return the task data argument of the parallel_for routine.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00633">SVFUtil.h:633</a></div></div>
761
378
  <div class="ttc" id="aclassSVF_1_1SVFValue_html"><div class="ttname"><a href="classSVF_1_1SVFValue.html">SVF::SVFValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00150">SVFValue.h:150</a></div></div>
762
- <div class="ttc" id="acJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
763
379
  <div class="ttc" id="aclassSVF_1_1AccessPath_html"><div class="ttname"><a href="classSVF_1_1AccessPath.html">SVF::AccessPath</a></div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00052">AccessPath.h:52</a></div></div>
764
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a5c2abeb363081381c3dc939ab511e3f0"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">SVF::SVFUtil::isThreadForkCall</a></div><div class="ttdeci">bool isThreadForkCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00540">SVFUtil.h:540</a></div></div>
380
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a5c2abeb363081381c3dc939ab511e3f0"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">SVF::SVFUtil::isThreadForkCall</a></div><div class="ttdeci">bool isThreadForkCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00525">SVFUtil.h:525</a></div></div>
765
381
  <div class="ttc" id="aclassSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00385">ICFGNode.h:385</a></div></div>
766
382
  <div class="ttc" id="aclassSVF_1_1SVFType_html"><div class="ttname"><a href="classSVF_1_1SVFType.html">SVF::SVFType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00242">SVFType.h:242</a></div></div>
767
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aedfa6e9216c6c788c26aef1967689b76"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">SVF::SVFUtil::isHeapAllocExtCallViaArg</a></div><div class="ttdeci">bool isHeapAllocExtCallViaArg(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00443">SVFUtil.h:443</a></div></div>
768
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1ExtFunctionOps_html_a3d284974561e173762d173d4ae466817"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1ExtFunctionOps.html#a3d284974561e173762d173d4ae466817">SVF::ExtAPI::ExtFunctionOps::getCallStmtNum</a></div><div class="ttdeci">u32_t getCallStmtNum()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00428">ExtAPI.h:428</a></div></div>
769
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a61ed4bb80d88b0f8dbc02535c224fdfb"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a61ed4bb80d88b0f8dbc02535c224fdfb">SVF::SVFUtil::isHeapAllocOrStaticExtCall</a></div><div class="ttdeci">bool isHeapAllocOrStaticExtCall(const CallSite cs)</div><div class="ttdoc">Return true if the call is a static global call.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00527">SVFUtil.h:527</a></div></div>
383
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aedfa6e9216c6c788c26aef1967689b76"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">SVF::SVFUtil::isHeapAllocExtCallViaArg</a></div><div class="ttdeci">bool isHeapAllocExtCallViaArg(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00439">SVFUtil.h:439</a></div></div>
384
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a76b0d0ac69c170838cfc8ee26f4518a0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a76b0d0ac69c170838cfc8ee26f4518a0">SVF::LLVMUtil::getProgFunction</a></div><div class="ttdeci">const Function * getProgFunction(const std::string &amp;funName)</div><div class="ttdoc">Get program entry function from module.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00088">LLVMUtil.h:88</a></div></div>
385
+ <div class="ttc" id="aclassSVF_1_1SymbolTableBuilder_html_ac2fa9a797e3e2a8885ccc488030659d5"><div class="ttname"><a href="classSVF_1_1SymbolTableBuilder.html#ac2fa9a797e3e2a8885ccc488030659d5">SVF::SymbolTableBuilder::collectSym</a></div><div class="ttdeci">void collectSym(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableBuilder_8cpp_source.html#l00259">SymbolTableBuilder.cpp:259</a></div></div>
386
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8a77403306e97ab4cb31a56d38bba5be"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">SVF::LLVMUtil::isConstDataOrAggData</a></div><div class="ttdeci">bool isConstDataOrAggData(const Value *val)</div><div class="ttdoc">Return true if the value refers to constant data, e.g., i32 0.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00396">LLVMUtil.h:396</a></div></div>
770
387
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00270">SVFValue.h:270</a></div></div>
771
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a5cee46f58bdab3f9b1c698e97290152f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a5cee46f58bdab3f9b1c698e97290152f">SVF::SVFUtil::getTaskFuncAtHareParForSite</a></div><div class="ttdeci">const SVFValue * getTaskFuncAtHareParForSite(const CallSite cs)</div><div class="ttdoc">Return the task function of the parallel_for routine.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00636">SVFUtil.h:636</a></div></div>
772
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_ab0e1b9953acf05220df3337df55fbe95"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#ab0e1b9953acf05220df3337df55fbe95">SVF::ExtAPI::Operand::setSrcID</a></div><div class="ttdeci">void setSrcID(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00273">ExtAPI.h:273</a></div></div>
773
- <div class="ttc" id="aclassSVF_1_1SVFConstantInt_html"><div class="ttname"><a href="classSVF_1_1SVFConstantInt.html">SVF::SVFConstantInt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00922">SVFValue.h:922</a></div></div>
774
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_a400b778765605f10be2b01b21ef3d129"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#a400b778765605f10be2b01b21ef3d129">SVF::ExtAPI::Operand::getDstID</a></div><div class="ttdeci">NodeID getDstID() const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00277">ExtAPI.h:277</a></div></div>
775
- <div class="ttc" id="aclassSVF_1_1ExtAPI_html_ac88fa9d671d9b701c072a454e6c30c0f"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ac88fa9d671d9b701c072a454e6c30c0f">SVF::ExtAPI::OperationType</a></div><div class="ttdeci">OperationType</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00227">ExtAPI.h:227</a></div></div>
776
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_af3fe2b022c36d228e9bc7050ea39118e"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#af3fe2b022c36d228e9bc7050ea39118e">SVF::ExtAPI::Operand::getOffsetOrSizeStr</a></div><div class="ttdeci">const std::string &amp; getOffsetOrSizeStr() const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00285">ExtAPI.h:285</a></div></div>
777
- <div class="ttc" id="anamespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00052">SVFType.h:52</a></div></div>
778
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00309">SVFUtil.h:309</a></div></div>
779
- <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_ac979b49b449b97b2a23f195cb107ec77"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#ac979b49b449b97b2a23f195cb107ec77">SVF::SVFCallInst::addArgument</a></div><div class="ttdeci">void addArgument(const SVFValue *a)</div><div class="ttdoc">attributes to be set only through Module builders e.g., LLVMModule</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00669">SVFValue.h:669</a></div></div>
780
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a73215bac62f1340a58f6c7f2ba9b0e7b"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">SVF::SVFUtil::getHeapAllocHoldingArgPosition</a></div><div class="ttdeci">int getHeapAllocHoldingArgPosition(const SVFFunction *fun)</div><div class="ttdoc">Get the position of argument that holds an allocated heap object.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00336">SVFUtil.h:336</a></div></div>
781
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_ae768fbf44ca01515e3ef553c41d10c22"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#ae768fbf44ca01515e3ef553c41d10c22">SVF::ExtAPI::Operand::setOffsetOrSize</a></div><div class="ttdeci">void setOffsetOrSize(u32_t off)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00297">ExtAPI.h:297</a></div></div>
388
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a5cee46f58bdab3f9b1c698e97290152f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a5cee46f58bdab3f9b1c698e97290152f">SVF::SVFUtil::getTaskFuncAtHareParForSite</a></div><div class="ttdeci">const SVFValue * getTaskFuncAtHareParForSite(const CallSite cs)</div><div class="ttdoc">Return the task function of the parallel_for routine.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00621">SVFUtil.h:621</a></div></div>
389
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a54098ea73555caa682287f8e3c9e8fcb"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a54098ea73555caa682287f8e3c9e8fcb">SVF::SVFUtil::isMemsetExtFun</a></div><div class="ttdeci">bool isMemsetExtFun(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00319">SVFUtil.h:319</a></div></div>
390
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a73215bac62f1340a58f6c7f2ba9b0e7b"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">SVF::SVFUtil::getHeapAllocHoldingArgPosition</a></div><div class="ttdeci">int getHeapAllocHoldingArgPosition(const SVFFunction *fun)</div><div class="ttdoc">Get the position of argument that holds an allocated heap object.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00340">SVFUtil.h:340</a></div></div>
391
+ <div class="ttc" id="anamespaceSVF_html_ac4e93e1fec646ff222940a663843921b"><div class="ttname"><a href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">SVF::GetElementPtrInst</a></div><div class="ttdeci">llvm::GetElementPtrInst GetElementPtrInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00160">BasicTypes.h:160</a></div></div>
392
+ <div class="ttc" id="anamespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00123">BasicTypes.h:123</a></div></div>
782
393
  <div class="ttc" id="acJSON_8cpp_html_a95bf816579e97b6f33bdb5e25ed6d5de"><div class="ttname"><a href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a></div><div class="ttdeci">buffer offset</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l01113">cJSON.cpp:1113</a></div></div>
783
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
784
- <div class="ttc" id="anamespaceSVF_html_ad11fe2412b2182365a662ff0e4639b48"><div class="ttname"><a href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SVF::SymID</a></div><div class="ttdeci">unsigned SymID</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00058">SVFType.h:58</a></div></div>
785
- <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a0d5031bd11b6372803082111ec2cb4f6"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a0d5031bd11b6372803082111ec2cb4f6">SVF::SVFFunction::addBasicBlock</a></div><div class="ttdeci">void addBasicBlock(const SVFBasicBlock *bb)</div><div class="ttdoc">all formal arguments of this function</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00298">SVFValue.h:298</a></div></div>
786
- <div class="ttc" id="aclassSVF_1_1FunExitICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunExitICFGNode.html">SVF::FunExitICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00324">ICFGNode.h:324</a></div></div>
787
- <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a7660f2d57d671c4826186e85eaff055d"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a7660f2d57d671c4826186e85eaff055d">SVF::SVFFunction::getFunctionType</a></div><div class="ttdeci">const SVFFunctionType * getFunctionType() const</div><div class="ttdoc">Returns the FunctionType.</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00354">SVFValue.h:354</a></div></div>
788
- <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a2790c5289dad1d6e80f7597a2ea458ab"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2790c5289dad1d6e80f7597a2ea458ab">SVF::SVFUtil::getForkedFun</a></div><div class="ttdeci">const SVFValue * getForkedFun(const CallSite cs)</div><div class="ttdoc">Return thread fork function.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00417">SVFUtil.h:417</a></div></div>
394
+ <div class="ttc" id="aclassSVF_1_1SymbolTableBuilder_html"><div class="ttname"><a href="classSVF_1_1SymbolTableBuilder.html">SVF::SymbolTableBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableBuilder_8h_source.html#l00042">SymbolTableBuilder.h:42</a></div></div>
395
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html">SVF::LLVMModuleSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00044">LLVMModule.h:44</a></div></div>
396
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a2790c5289dad1d6e80f7597a2ea458ab"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2790c5289dad1d6e80f7597a2ea458ab">SVF::SVFUtil::getForkedFun</a></div><div class="ttdeci">const SVFValue * getForkedFun(const CallSite cs)</div><div class="ttdoc">Return thread fork function.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00413">SVFUtil.h:413</a></div></div>
789
397
  <div class="ttc" id="anamespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
790
398
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a870b63af2bf9fe43cdf1df3d56b20f6c"><div class="ttname"><a href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">SVF::SVFType::isPointerTy</a></div><div class="ttdeci">bool isPointerTy() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00319">SVFType.h:319</a></div></div>
791
- <div class="ttc" id="aclassSVF_1_1SVFArgument_html"><div class="ttname"><a href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00853">SVFValue.h:853</a></div></div>
792
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_acb1ed4536708a8d254b045529ba8205e"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#acb1ed4536708a8d254b045529ba8205e">SVF::ExtAPI::Operand::getDstValue</a></div><div class="ttdeci">const std::string &amp; getDstValue() const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00261">ExtAPI.h:261</a></div></div>
793
- <div class="ttc" id="aSVFType_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DBUG model of each pass.</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00543">SVFType.h:543</a></div></div>
794
- <div class="ttc" id="aclassSVF_1_1SVFInstruction_html_ae009f41cbf48d949d4325e08fe8d7198"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">SVF::SVFInstruction::getParent</a></div><div class="ttdeci">const SVFBasicBlock * getParent() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00614">SVFValue.h:614</a></div></div>
795
- <div class="ttc" id="aclassSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00587">SVFValue.h:587</a></div></div>
796
- <div class="ttc" id="aclassSVF_1_1ExtAPI_1_1Operand_html_a672e8dd7a153def307b566ad65724230"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operand.html#a672e8dd7a153def307b566ad65724230">SVF::ExtAPI::Operand::getSrcID</a></div><div class="ttdeci">NodeID getSrcID() const</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00269">ExtAPI.h:269</a></div></div>
797
- <div class="ttc" id="aclassSVF_1_1SVFConstantInt_html_a73f04bdfc19261b65164b98787bc2ed4"><div class="ttname"><a href="classSVF_1_1SVFConstantInt.html#a73f04bdfc19261b65164b98787bc2ed4">SVF::SVFConstantInt::getSExtValue</a></div><div class="ttdeci">s64_t getSExtValue() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00950">SVFValue.h:950</a></div></div>
798
- <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_ab654651e3117e8480544615fb1574766"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#ab654651e3117e8480544615fb1574766">SVF::SVFCallInst::getCalledFunction</a></div><div class="ttdeci">const SVFFunction * getCalledFunction() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00719">SVFValue.h:719</a></div></div>
799
- <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a496d0e963f0f6a4f9c08183fa91792b0"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">SVF::SVFCallInst::arg_size</a></div><div class="ttdeci">u32_t arg_size() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00694">SVFValue.h:694</a></div></div>
399
+ <div class="ttc" id="aclassSVF_1_1SVFArgument_html"><div class="ttname"><a href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00859">SVFValue.h:859</a></div></div>
400
+ <div class="ttc" id="aclassSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00593">SVFValue.h:593</a></div></div>
401
+ <div class="ttc" id="aSymbolTableBuilder_8h_html"><div class="ttname"><a href="SymbolTableBuilder_8h.html">SymbolTableBuilder.h</a></div></div>
402
+ <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a496d0e963f0f6a4f9c08183fa91792b0"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">SVF::SVFCallInst::arg_size</a></div><div class="ttdeci">u32_t arg_size() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00700">SVFValue.h:700</a></div></div>
403
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abba4111230f6009bbf50518ee36a9870"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">SVF::LLVMUtil::getPtrElementType</a></div><div class="ttdeci">static Type * getPtrElementType(const PointerType *pty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00119">LLVMUtil.h:119</a></div></div>
800
404
  <div class="ttc" id="anamespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
801
405
  <div class="ttc" id="aSVFIRBuilder_8h_html"><div class="ttname"><a href="SVFIRBuilder_8h.html">SVFIRBuilder.h</a></div></div>
802
406
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab2e0196e0ce547ab4a483cc6d2646b24"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(const std::string &amp;msg)</div><div class="ttdoc">Writes a message run through wrnMsg.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00066">SVFUtil.cpp:66</a></div></div>