svf-lib 1.0.2319 → 1.0.2321

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 (320) hide show
  1. package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/WorkList.h +0 -0
  2. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
  3. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
  4. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
  5. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
  6. package/SVF-linux-aarch64/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
  7. package/SVF-linux-aarch64/Release-build/lib/libSvfCore.so.3.1 +0 -0
  8. package/SVF-linux-aarch64/Release-build/lib/libSvfLLVM.so.3.1 +0 -0
  9. package/SVF-linux-aarch64/Release-build/lib/pkgconfig/SVF.pc +12 -0
  10. package/SVF-osx/Release-build/bin/ae +0 -0
  11. package/SVF-osx/Release-build/bin/cfl +0 -0
  12. package/SVF-osx/Release-build/bin/dvf +0 -0
  13. package/SVF-osx/Release-build/bin/llvm2svf +0 -0
  14. package/SVF-osx/Release-build/bin/mta +0 -0
  15. package/SVF-osx/Release-build/bin/saber +0 -0
  16. package/SVF-osx/Release-build/bin/svf-ex +0 -0
  17. package/SVF-osx/Release-build/bin/wpa +0 -0
  18. package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractState.h +425 -0
  19. package/SVF-osx/Release-build/include/SVF/AE/Core/AbstractValue.h +157 -0
  20. package/SVF-osx/Release-build/include/SVF/AE/Core/AddressValue.h +225 -0
  21. package/SVF-osx/Release-build/include/SVF/AE/Core/ICFGWTO.h +135 -0
  22. package/SVF-osx/Release-build/include/SVF/AE/Core/IntervalValue.h +1055 -0
  23. package/SVF-osx/Release-build/include/SVF/AE/Core/NumericValue.h +1292 -0
  24. package/SVF-osx/Release-build/include/SVF/AE/Core/RelExeState.h +226 -0
  25. package/SVF-osx/Release-build/include/SVF/AE/Core/RelationSolver.h +91 -0
  26. package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AEDetector.h +439 -0
  27. package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbsExtAPI.h +138 -0
  28. package/SVF-osx/Release-build/include/SVF/AE/Svfexe/AbstractInterpretation.h +384 -0
  29. package/SVF-osx/Release-build/include/SVF/CFL/CFGNormalizer.h +84 -0
  30. package/SVF-osx/Release-build/include/SVF/CFL/CFGrammar.h +468 -0
  31. package/SVF-osx/Release-build/include/SVF/CFL/CFLAlias.h +168 -0
  32. package/SVF-osx/Release-build/include/SVF/CFL/CFLBase.h +118 -0
  33. package/SVF-osx/Release-build/include/SVF/CFL/CFLGramGraphChecker.h +74 -0
  34. package/SVF-osx/Release-build/include/SVF/CFL/CFLGraphBuilder.h +168 -0
  35. package/SVF-osx/Release-build/include/SVF/CFL/CFLSVFGBuilder.h +58 -0
  36. package/SVF-osx/Release-build/include/SVF/CFL/CFLSolver.h +374 -0
  37. package/SVF-osx/Release-build/include/SVF/CFL/CFLStat.h +67 -0
  38. package/SVF-osx/Release-build/include/SVF/CFL/CFLVF.h +68 -0
  39. package/SVF-osx/Release-build/include/SVF/CFL/GrammarBuilder.h +100 -0
  40. package/SVF-osx/Release-build/include/SVF/DDA/ContextDDA.h +230 -0
  41. package/SVF-osx/Release-build/include/SVF/DDA/DDAClient.h +163 -0
  42. package/SVF-osx/Release-build/include/SVF/DDA/DDAPass.h +102 -0
  43. package/SVF-osx/Release-build/include/SVF/DDA/DDAStat.h +121 -0
  44. package/SVF-osx/Release-build/include/SVF/DDA/DDAVFSolver.h +794 -0
  45. package/SVF-osx/Release-build/include/SVF/DDA/FlowDDA.h +178 -0
  46. package/SVF-osx/Release-build/include/SVF/FastCluster/fastcluster.h +80 -0
  47. package/SVF-osx/Release-build/include/SVF/Graphs/BasicBlockG.h +318 -0
  48. package/SVF-osx/Release-build/include/SVF/Graphs/CDG.h +482 -0
  49. package/SVF-osx/Release-build/include/SVF/Graphs/CFLGraph.h +232 -0
  50. package/SVF-osx/Release-build/include/SVF/Graphs/CHG.h +368 -0
  51. package/SVF-osx/Release-build/include/SVF/Graphs/CallGraph.h +497 -0
  52. package/SVF-osx/Release-build/include/SVF/Graphs/ConsG.h +402 -0
  53. package/SVF-osx/Release-build/include/SVF/Graphs/ConsGEdge.h +355 -0
  54. package/SVF-osx/Release-build/include/SVF/Graphs/ConsGNode.h +418 -0
  55. package/SVF-osx/Release-build/include/SVF/Graphs/DOTGraphTraits.h +188 -0
  56. package/SVF-osx/Release-build/include/SVF/Graphs/GenericGraph.h +628 -0
  57. package/SVF-osx/Release-build/include/SVF/Graphs/GraphPrinter.h +111 -0
  58. package/SVF-osx/Release-build/include/SVF/Graphs/GraphTraits.h +150 -0
  59. package/SVF-osx/Release-build/include/SVF/Graphs/GraphWriter.h +380 -0
  60. package/SVF-osx/Release-build/include/SVF/Graphs/ICFG.h +331 -0
  61. package/SVF-osx/Release-build/include/SVF/Graphs/ICFGEdge.h +281 -0
  62. package/SVF-osx/Release-build/include/SVF/Graphs/ICFGNode.h +669 -0
  63. package/SVF-osx/Release-build/include/SVF/Graphs/ICFGStat.h +164 -0
  64. package/SVF-osx/Release-build/include/SVF/Graphs/IRGraph.h +398 -0
  65. package/SVF-osx/Release-build/include/SVF/Graphs/SCC.h +375 -0
  66. package/SVF-osx/Release-build/include/SVF/Graphs/SVFG.h +491 -0
  67. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGEdge.h +237 -0
  68. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGNode.h +501 -0
  69. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGOPT.h +372 -0
  70. package/SVF-osx/Release-build/include/SVF/Graphs/SVFGStat.h +273 -0
  71. package/SVF-osx/Release-build/include/SVF/Graphs/ThreadCallGraph.h +399 -0
  72. package/SVF-osx/Release-build/include/SVF/Graphs/VFG.h +726 -0
  73. package/SVF-osx/Release-build/include/SVF/Graphs/VFGEdge.h +295 -0
  74. package/SVF-osx/Release-build/include/SVF/Graphs/VFGNode.h +1266 -0
  75. package/SVF-osx/Release-build/include/SVF/Graphs/WTO.h +872 -0
  76. package/SVF-osx/Release-build/include/SVF/MSSA/MSSAMuChi.h +722 -0
  77. package/SVF-osx/Release-build/include/SVF/MSSA/MemPartition.h +169 -0
  78. package/SVF-osx/Release-build/include/SVF/MSSA/MemRegion.h +489 -0
  79. package/SVF-osx/Release-build/include/SVF/MSSA/MemSSA.h +452 -0
  80. package/SVF-osx/Release-build/include/SVF/MSSA/SVFGBuilder.h +104 -0
  81. package/SVF-osx/Release-build/include/SVF/MTA/LockAnalysis.h +533 -0
  82. package/SVF-osx/Release-build/include/SVF/MTA/MHP.h +546 -0
  83. package/SVF-osx/Release-build/include/SVF/MTA/MTA.h +97 -0
  84. package/SVF-osx/Release-build/include/SVF/MTA/MTAStat.h +73 -0
  85. package/SVF-osx/Release-build/include/SVF/MTA/TCT.h +620 -0
  86. package/SVF-osx/Release-build/include/SVF/MemoryModel/AbstractPointsToDS.h +316 -0
  87. package/SVF-osx/Release-build/include/SVF/MemoryModel/AccessPath.h +194 -0
  88. package/SVF-osx/Release-build/include/SVF/MemoryModel/ConditionalPT.h +878 -0
  89. package/SVF-osx/Release-build/include/SVF/MemoryModel/MutablePointsToDS.h +1025 -0
  90. package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToCache.h +463 -0
  91. package/SVF-osx/Release-build/include/SVF/MemoryModel/PersistentPointsToDS.h +955 -0
  92. package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysis.h +428 -0
  93. package/SVF-osx/Release-build/include/SVF/MemoryModel/PointerAnalysisImpl.h +602 -0
  94. package/SVF-osx/Release-build/include/SVF/MemoryModel/PointsTo.h +255 -0
  95. package/SVF-osx/Release-build/include/SVF/MemoryModel/SVFLoop.h +167 -0
  96. package/SVF-osx/Release-build/include/SVF/SABER/DoubleFreeChecker.h +76 -0
  97. package/SVF-osx/Release-build/include/SVF/SABER/FileChecker.h +80 -0
  98. package/SVF-osx/Release-build/include/SVF/SABER/LeakChecker.h +122 -0
  99. package/SVF-osx/Release-build/include/SVF/SABER/ProgSlice.h +327 -0
  100. package/SVF-osx/Release-build/include/SVF/SABER/SaberCheckerAPI.h +151 -0
  101. package/SVF-osx/Release-build/include/SVF/SABER/SaberCondAllocator.h +317 -0
  102. package/SVF-osx/Release-build/include/SVF/SABER/SaberSVFGBuilder.h +114 -0
  103. package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkDDA.h +327 -0
  104. package/SVF-osx/Release-build/include/SVF/SABER/SrcSnkSolver.h +186 -0
  105. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BasicTypes.h +280 -0
  106. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/BreakConstantExpr.h +93 -0
  107. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CHGBuilder.h +78 -0
  108. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/CppUtil.h +184 -0
  109. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/DCHG.h +474 -0
  110. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/GEPTypeBridgeIterator.h +183 -0
  111. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ICFGBuilder.h +160 -0
  112. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMLoopAnalysis.h +60 -0
  113. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMModule.h +527 -0
  114. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/LLVMUtil.h +433 -0
  115. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/ObjTypeInference.h +129 -0
  116. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SVFIRBuilder.h +523 -0
  117. package/SVF-osx/Release-build/include/SVF/SVF-LLVM/SymbolTableBuilder.h +132 -0
  118. package/SVF-osx/Release-build/include/SVF/SVFIR/ObjTypeInfo.h +224 -0
  119. package/SVF-osx/Release-build/include/SVF/SVFIR/PAGBuilderFromFile.h +80 -0
  120. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFIR.h +856 -0
  121. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFStatements.h +1330 -0
  122. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFType.h +606 -0
  123. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFValue.h +338 -0
  124. package/SVF-osx/Release-build/include/SVF/SVFIR/SVFVariables.h +2212 -0
  125. package/SVF-osx/Release-build/include/SVF/Util/Annotator.h +180 -0
  126. package/SVF-osx/Release-build/include/SVF/Util/BitVector.h +55 -0
  127. package/SVF-osx/Release-build/include/SVF/Util/CDGBuilder.h +107 -0
  128. package/SVF-osx/Release-build/include/SVF/Util/CallGraphBuilder.h +61 -0
  129. package/SVF-osx/Release-build/include/SVF/Util/Casting.h +426 -0
  130. package/SVF-osx/Release-build/include/SVF/Util/CommandLine.h +530 -0
  131. package/SVF-osx/Release-build/include/SVF/Util/CoreBitVector.h +214 -0
  132. package/SVF-osx/Release-build/include/SVF/Util/CxtStmt.h +502 -0
  133. package/SVF-osx/Release-build/include/SVF/Util/DPItem.h +618 -0
  134. package/SVF-osx/Release-build/include/SVF/Util/ExtAPI.h +117 -0
  135. package/SVF-osx/Release-build/include/SVF/Util/GeneralType.h +127 -0
  136. package/SVF-osx/Release-build/include/SVF/Util/GraphReachSolver.h +186 -0
  137. package/SVF-osx/Release-build/include/SVF/Util/NodeIDAllocator.h +203 -0
  138. package/SVF-osx/Release-build/include/SVF/Util/Options.h +273 -0
  139. package/SVF-osx/Release-build/include/SVF/Util/PTAStat.h +83 -0
  140. package/SVF-osx/Release-build/include/SVF/Util/SVFBugReport.h +427 -0
  141. package/SVF-osx/Release-build/include/SVF/Util/SVFLoopAndDomInfo.h +169 -0
  142. package/SVF-osx/Release-build/include/SVF/Util/SVFStat.h +103 -0
  143. package/SVF-osx/Release-build/include/SVF/Util/SVFUtil.h +478 -0
  144. package/SVF-osx/Release-build/include/SVF/Util/SparseBitVector.h +1252 -0
  145. package/SVF-osx/Release-build/include/SVF/Util/ThreadAPI.h +188 -0
  146. package/SVF-osx/Release-build/include/SVF/Util/WorkList.h +317 -0
  147. package/SVF-osx/Release-build/include/SVF/Util/Z3Expr.h +325 -0
  148. package/SVF-osx/Release-build/include/SVF/Util/cJSON.h +300 -0
  149. package/SVF-osx/Release-build/include/SVF/Util/config.h +46 -0
  150. package/SVF-osx/Release-build/include/SVF/Util/iterator.h +407 -0
  151. package/SVF-osx/Release-build/include/SVF/Util/iterator_range.h +76 -0
  152. package/SVF-osx/Release-build/include/SVF/WPA/Andersen.h +434 -0
  153. package/SVF-osx/Release-build/include/SVF/WPA/AndersenPWC.h +160 -0
  154. package/SVF-osx/Release-build/include/SVF/WPA/CSC.h +95 -0
  155. package/SVF-osx/Release-build/include/SVF/WPA/FlowSensitive.h +322 -0
  156. package/SVF-osx/Release-build/include/SVF/WPA/Steensgaard.h +131 -0
  157. package/SVF-osx/Release-build/include/SVF/WPA/TypeAnalysis.h +90 -0
  158. package/SVF-osx/Release-build/include/SVF/WPA/VersionedFlowSensitive.h +295 -0
  159. package/SVF-osx/Release-build/include/SVF/WPA/WPAFSSolver.h +246 -0
  160. package/SVF-osx/Release-build/include/SVF/WPA/WPAPass.h +115 -0
  161. package/SVF-osx/Release-build/include/SVF/WPA/WPASolver.h +205 -0
  162. package/SVF-osx/Release-build/include/SVF/WPA/WPAStat.h +222 -0
  163. package/SVF-osx/Release-build/include/SVF/extapi.bc +2384 -0
  164. package/SVF-osx/Release-build/lib/cmake/SVF/Modules/FindZ3.cmake +93 -0
  165. package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfig.cmake +106 -0
  166. package/SVF-osx/Release-build/lib/cmake/SVF/SVFConfigVersion.cmake +43 -0
  167. package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets-release.cmake +101 -0
  168. package/SVF-osx/Release-build/lib/cmake/SVF/SVFTargets.cmake +180 -0
  169. package/SVF-osx/Release-build/lib/libSvfCore.3.1.dylib +0 -0
  170. package/SVF-osx/Release-build/lib/libSvfLLVM.3.1.dylib +0 -0
  171. package/SVF-osx/Release-build/lib/pkgconfig/SVF.pc +12 -0
  172. package/package.json +1 -1
  173. package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PAGGrammar.txt +0 -15
  174. package/SVF-linux-aarch64/Release-build/include/CFL/grammar/PEGGrammar.txt +0 -11
  175. package/SVF-linux-aarch64/Release-build/include/CFL/grammar/VFGGrammar.txt +0 -7
  176. package/SVF-linux-aarch64/Release-build/include/FastCluster/LICENSE.TXT +0 -13
  177. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractState.h +0 -0
  178. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AbstractValue.h +0 -0
  179. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/AddressValue.h +0 -0
  180. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/ICFGWTO.h +0 -0
  181. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/IntervalValue.h +0 -0
  182. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/NumericValue.h +0 -0
  183. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelExeState.h +0 -0
  184. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Core/RelationSolver.h +0 -0
  185. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AEDetector.h +0 -0
  186. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbsExtAPI.h +0 -0
  187. /package/SVF-linux-aarch64/Release-build/include/{AE → SVF/AE}/Svfexe/AbstractInterpretation.h +0 -0
  188. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGNormalizer.h +0 -0
  189. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFGrammar.h +0 -0
  190. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLAlias.h +0 -0
  191. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLBase.h +0 -0
  192. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGramGraphChecker.h +0 -0
  193. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLGraphBuilder.h +0 -0
  194. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSVFGBuilder.h +0 -0
  195. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLSolver.h +0 -0
  196. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLStat.h +0 -0
  197. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/CFLVF.h +0 -0
  198. /package/SVF-linux-aarch64/Release-build/include/{CFL → SVF/CFL}/GrammarBuilder.h +0 -0
  199. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/ContextDDA.h +0 -0
  200. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAClient.h +0 -0
  201. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAPass.h +0 -0
  202. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAStat.h +0 -0
  203. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/DDAVFSolver.h +0 -0
  204. /package/SVF-linux-aarch64/Release-build/include/{DDA → SVF/DDA}/FlowDDA.h +0 -0
  205. /package/SVF-linux-aarch64/Release-build/include/{FastCluster → SVF/FastCluster}/fastcluster.h +0 -0
  206. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/BasicBlockG.h +0 -0
  207. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CDG.h +0 -0
  208. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CFLGraph.h +0 -0
  209. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CHG.h +0 -0
  210. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/CallGraph.h +0 -0
  211. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsG.h +0 -0
  212. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGEdge.h +0 -0
  213. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ConsGNode.h +0 -0
  214. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/DOTGraphTraits.h +0 -0
  215. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GenericGraph.h +0 -0
  216. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphPrinter.h +0 -0
  217. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphTraits.h +0 -0
  218. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/GraphWriter.h +0 -0
  219. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFG.h +0 -0
  220. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGEdge.h +0 -0
  221. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGNode.h +0 -0
  222. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ICFGStat.h +0 -0
  223. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/IRGraph.h +0 -0
  224. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SCC.h +0 -0
  225. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFG.h +0 -0
  226. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGEdge.h +0 -0
  227. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGNode.h +0 -0
  228. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGOPT.h +0 -0
  229. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/SVFGStat.h +0 -0
  230. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/ThreadCallGraph.h +0 -0
  231. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFG.h +0 -0
  232. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGEdge.h +0 -0
  233. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/VFGNode.h +0 -0
  234. /package/SVF-linux-aarch64/Release-build/include/{Graphs → SVF/Graphs}/WTO.h +0 -0
  235. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MSSAMuChi.h +0 -0
  236. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemPartition.h +0 -0
  237. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemRegion.h +0 -0
  238. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/MemSSA.h +0 -0
  239. /package/SVF-linux-aarch64/Release-build/include/{MSSA → SVF/MSSA}/SVFGBuilder.h +0 -0
  240. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/LockAnalysis.h +0 -0
  241. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MHP.h +0 -0
  242. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTA.h +0 -0
  243. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/MTAStat.h +0 -0
  244. /package/SVF-linux-aarch64/Release-build/include/{MTA → SVF/MTA}/TCT.h +0 -0
  245. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AbstractPointsToDS.h +0 -0
  246. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/AccessPath.h +0 -0
  247. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/ConditionalPT.h +0 -0
  248. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/MutablePointsToDS.h +0 -0
  249. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToCache.h +0 -0
  250. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PersistentPointsToDS.h +0 -0
  251. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysis.h +0 -0
  252. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointerAnalysisImpl.h +0 -0
  253. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/PointsTo.h +0 -0
  254. /package/SVF-linux-aarch64/Release-build/include/{MemoryModel → SVF/MemoryModel}/SVFLoop.h +0 -0
  255. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/DoubleFreeChecker.h +0 -0
  256. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/FileChecker.h +0 -0
  257. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/LeakChecker.h +0 -0
  258. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/ProgSlice.h +0 -0
  259. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCheckerAPI.h +0 -0
  260. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberCondAllocator.h +0 -0
  261. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SaberSVFGBuilder.h +0 -0
  262. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkDDA.h +0 -0
  263. /package/SVF-linux-aarch64/Release-build/include/{SABER → SVF/SABER}/SrcSnkSolver.h +0 -0
  264. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BasicTypes.h +0 -0
  265. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/BreakConstantExpr.h +0 -0
  266. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CHGBuilder.h +0 -0
  267. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/CppUtil.h +0 -0
  268. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/DCHG.h +0 -0
  269. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/GEPTypeBridgeIterator.h +0 -0
  270. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ICFGBuilder.h +0 -0
  271. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMLoopAnalysis.h +0 -0
  272. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMModule.h +0 -0
  273. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/LLVMUtil.h +0 -0
  274. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/ObjTypeInference.h +0 -0
  275. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SVFIRBuilder.h +0 -0
  276. /package/SVF-linux-aarch64/Release-build/include/{SVF-LLVM → SVF/SVF-LLVM}/SymbolTableBuilder.h +0 -0
  277. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/ObjTypeInfo.h +0 -0
  278. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/PAGBuilderFromFile.h +0 -0
  279. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFIR.h +0 -0
  280. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFStatements.h +0 -0
  281. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFType.h +0 -0
  282. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFValue.h +0 -0
  283. /package/SVF-linux-aarch64/Release-build/include/{SVFIR → SVF/SVFIR}/SVFVariables.h +0 -0
  284. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Annotator.h +0 -0
  285. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/BitVector.h +0 -0
  286. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CDGBuilder.h +0 -0
  287. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CallGraphBuilder.h +0 -0
  288. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Casting.h +0 -0
  289. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CommandLine.h +0 -0
  290. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CoreBitVector.h +0 -0
  291. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/CxtStmt.h +0 -0
  292. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/DPItem.h +0 -0
  293. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ExtAPI.h +0 -0
  294. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GeneralType.h +0 -0
  295. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/GraphReachSolver.h +0 -0
  296. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/NodeIDAllocator.h +0 -0
  297. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Options.h +0 -0
  298. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/PTAStat.h +0 -0
  299. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFBugReport.h +0 -0
  300. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFLoopAndDomInfo.h +0 -0
  301. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFStat.h +0 -0
  302. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SVFUtil.h +0 -0
  303. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/SparseBitVector.h +0 -0
  304. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/ThreadAPI.h +0 -0
  305. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/Z3Expr.h +0 -0
  306. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/cJSON.h +0 -0
  307. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator.h +0 -0
  308. /package/SVF-linux-aarch64/Release-build/include/{Util → SVF/Util}/iterator_range.h +0 -0
  309. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Andersen.h +0 -0
  310. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/AndersenPWC.h +0 -0
  311. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/CSC.h +0 -0
  312. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/FlowSensitive.h +0 -0
  313. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/Steensgaard.h +0 -0
  314. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/TypeAnalysis.h +0 -0
  315. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/VersionedFlowSensitive.h +0 -0
  316. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAFSSolver.h +0 -0
  317. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAPass.h +0 -0
  318. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPASolver.h +0 -0
  319. /package/SVF-linux-aarch64/Release-build/include/{WPA → SVF/WPA}/WPAStat.h +0 -0
  320. /package/SVF-linux-aarch64/Release-build/{lib → include/SVF}/extapi.bc +0 -0
@@ -0,0 +1,669 @@
1
+ //===- ICFGNode.h -- ICFG node------------------------------------------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-2018> <Yulei Sui>
6
+ //
7
+
8
+ // This program is free software: you can redistribute it and/or modify
9
+ // it under the terms of the GNU Affero General Public License as published by
10
+ // the Free Software Foundation, either version 3 of the License, or
11
+ // (at your option) any later version.
12
+
13
+ // This program is distributed in the hope that it will be useful,
14
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ // GNU Affero General Public License for more details.
17
+
18
+ // You should have received a copy of the GNU Affero General Public License
19
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ //
21
+ //===----------------------------------------------------------------------===//
22
+
23
+ /*
24
+ * ICFGNode.h
25
+ *
26
+ * Created on: Sep 11, 2018
27
+ * Author: Yulei
28
+ */
29
+
30
+ #ifndef ICFGNODE_H_
31
+ #define ICFGNODE_H_
32
+
33
+ #include "Util/SVFUtil.h"
34
+ #include "Graphs/GenericGraph.h"
35
+ #include "Graphs/ICFGEdge.h"
36
+
37
+ namespace SVF
38
+ {
39
+
40
+ class ICFGNode;
41
+ class RetICFGNode;
42
+ class CallPE;
43
+ class RetPE;
44
+ class SVFStmt;
45
+ class SVFVar;
46
+ class VFGNode;
47
+
48
+ /*!
49
+ * Interprocedural control-flow graph node, representing different kinds of program statements
50
+ * including top-level pointers (ValVar) and address-taken objects (ObjVar)
51
+ */
52
+ typedef GenericNode<ICFGNode, ICFGEdge> GenericICFGNodeTy;
53
+
54
+ class ICFGNode : public GenericICFGNodeTy
55
+ {
56
+ friend class SVFIRWriter;
57
+ friend class SVFIRReader;
58
+
59
+ public:
60
+
61
+ typedef ICFGEdge::ICFGEdgeSetTy::iterator iterator;
62
+ typedef ICFGEdge::ICFGEdgeSetTy::const_iterator const_iterator;
63
+ typedef Set<const CallPE *> CallPESet;
64
+ typedef Set<const RetPE *> RetPESet;
65
+ typedef std::list<const VFGNode*> VFGNodeList;
66
+ typedef std::list<const SVFStmt*> SVFStmtList;
67
+ typedef GNodeK ICFGNodeK;
68
+
69
+ public:
70
+ /// Constructor
71
+ ICFGNode(NodeID i, GNodeK k) : GenericICFGNodeTy(i, k), fun(nullptr), bb(nullptr)
72
+ {
73
+ }
74
+
75
+ /// Return the function of this ICFGNode
76
+ virtual const FunObjVar* getFun() const
77
+ {
78
+ return fun;
79
+ }
80
+
81
+ /// Return the basic block of this ICFGNode
82
+ virtual const SVFBasicBlock* getBB() const
83
+ {
84
+ return bb;
85
+ }
86
+
87
+
88
+ /// Overloading operator << for dumping ICFG node ID
89
+ //@{
90
+ friend OutStream &operator<<(OutStream &o, const ICFGNode &node)
91
+ {
92
+ o << node.toString();
93
+ return o;
94
+ }
95
+ //@}
96
+
97
+ /// Set/Get methods of VFGNodes
98
+ ///@{
99
+ inline void addVFGNode(const VFGNode *vfgNode)
100
+ {
101
+ VFGNodes.push_back(vfgNode);
102
+ }
103
+
104
+ inline const VFGNodeList& getVFGNodes() const
105
+ {
106
+ return VFGNodes;
107
+ }
108
+ ///@}
109
+
110
+ /// Set/Get methods of VFGNodes
111
+ ///@{
112
+ inline void addSVFStmt(const SVFStmt *edge)
113
+ {
114
+ pagEdges.push_back(edge);
115
+ }
116
+
117
+ inline const SVFStmtList& getSVFStmts() const
118
+ {
119
+ return pagEdges;
120
+ }
121
+ ///@}
122
+
123
+ virtual const std::string toString() const;
124
+
125
+
126
+
127
+ void dump() const;
128
+
129
+
130
+ static inline bool classof(const ICFGNode *)
131
+ {
132
+ return true;
133
+ }
134
+
135
+ static inline bool classof(const GenericICFGNodeTy* node)
136
+ {
137
+ return isICFGNodeKinds(node->getNodeKind());
138
+ }
139
+
140
+ static inline bool classof(const SVFValue* node)
141
+ {
142
+ return isICFGNodeKinds(node->getNodeKind());
143
+ }
144
+
145
+
146
+
147
+ protected:
148
+ const FunObjVar* fun;
149
+ const SVFBasicBlock* bb;
150
+ VFGNodeList VFGNodes; //< a list of VFGNodes
151
+ SVFStmtList pagEdges; //< a list of PAGEdges
152
+
153
+ };
154
+
155
+ /*!
156
+ * Unique ICFG node stands for all global initializations
157
+ */
158
+ class GlobalICFGNode : public ICFGNode
159
+ {
160
+
161
+ public:
162
+ GlobalICFGNode(NodeID id) : ICFGNode(id, GlobalBlock)
163
+ {
164
+ }
165
+
166
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
167
+ //@{
168
+ static inline bool classof(const GlobalICFGNode *)
169
+ {
170
+ return true;
171
+ }
172
+
173
+ static inline bool classof(const ICFGNode *node)
174
+ {
175
+ return node->getNodeKind() == GlobalBlock;
176
+ }
177
+
178
+ static inline bool classof(const GenericICFGNodeTy *node)
179
+ {
180
+ return node->getNodeKind() == GlobalBlock;
181
+ }
182
+ //@}
183
+
184
+ const std::string toString() const override;
185
+
186
+ const std::string getSourceLoc() const override
187
+ {
188
+ return "Global ICFGNode";
189
+ }
190
+ };
191
+
192
+ /*!
193
+ * ICFG node stands for a program statement
194
+ */
195
+ class IntraICFGNode : public ICFGNode
196
+ {
197
+ friend class SVFIRWriter;
198
+ friend class SVFIRReader;
199
+ private:
200
+ bool isRet;
201
+
202
+ /// Constructor to create empty IntraICFGNode (for SVFIRReader/deserialization)
203
+ IntraICFGNode(NodeID id) : ICFGNode(id, IntraBlock), isRet(false) {}
204
+
205
+ public:
206
+ IntraICFGNode(NodeID id, const SVFBasicBlock* b, bool isReturn) : ICFGNode(id, IntraBlock), isRet(isReturn)
207
+ {
208
+ fun = b->getFunction();
209
+ bb = b;
210
+ }
211
+
212
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
213
+ //@{
214
+ static inline bool classof(const IntraICFGNode *)
215
+ {
216
+ return true;
217
+ }
218
+
219
+ static inline bool classof(const ICFGNode *node)
220
+ {
221
+ return node->getNodeKind() == IntraBlock;
222
+ }
223
+
224
+ static inline bool classof(const GenericICFGNodeTy *node)
225
+ {
226
+ return node->getNodeKind() == IntraBlock;
227
+ }
228
+ //@}
229
+
230
+ const std::string toString() const override;
231
+
232
+ inline bool isRetInst() const
233
+ {
234
+ return isRet;
235
+ }
236
+ };
237
+
238
+ class InterICFGNode : public ICFGNode
239
+ {
240
+
241
+ public:
242
+ /// Constructor
243
+ InterICFGNode(NodeID id, ICFGNodeK k) : ICFGNode(id, k)
244
+ {
245
+ }
246
+
247
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
248
+ //@{
249
+ static inline bool classof(const InterICFGNode *)
250
+ {
251
+ return true;
252
+ }
253
+
254
+ static inline bool classof(const ICFGNode* node)
255
+ {
256
+ return isInterICFGNodeKind(node->getNodeKind());
257
+ }
258
+
259
+ static inline bool classof(const GenericICFGNodeTy* node)
260
+ {
261
+ return isInterICFGNodeKind(node->getNodeKind());
262
+ }
263
+
264
+ static inline bool classof(const SVFValue* node)
265
+ {
266
+ return isInterICFGNodeKind(node->getNodeKind());
267
+ }
268
+
269
+ //@}
270
+ };
271
+
272
+
273
+
274
+
275
+ /*!
276
+ * Function entry ICFGNode containing a set of FormalParmVFGNodes of a function
277
+ */
278
+ class FunEntryICFGNode : public InterICFGNode
279
+ {
280
+ friend class SVFIRWriter;
281
+ friend class SVFIRReader;
282
+
283
+ public:
284
+ typedef std::vector<const SVFVar *> FormalParmNodeVec;
285
+ private:
286
+ FormalParmNodeVec FPNodes;
287
+
288
+ /// Constructor to create empty FunEntryICFGNode (for SVFIRReader/deserialization)
289
+ FunEntryICFGNode(NodeID id) : InterICFGNode(id, FunEntryBlock) {}
290
+
291
+ public:
292
+ FunEntryICFGNode(NodeID id, const FunObjVar* f);
293
+
294
+ /// Return function
295
+ inline const FunObjVar* getFun() const override
296
+ {
297
+ return fun;
298
+ }
299
+
300
+ /// Return the set of formal parameters
301
+ inline const FormalParmNodeVec &getFormalParms() const
302
+ {
303
+ return FPNodes;
304
+ }
305
+
306
+ /// Add formal parameters
307
+ inline void addFormalParms(const SVFVar *fp)
308
+ {
309
+ FPNodes.push_back(fp);
310
+ }
311
+
312
+ ///Methods for support type inquiry through isa, cast, and dyn_cast:
313
+ //@{
314
+ static inline bool classof(const FunEntryICFGNode *)
315
+ {
316
+ return true;
317
+ }
318
+
319
+ static inline bool classof(const InterICFGNode *node)
320
+ {
321
+ return node->getNodeKind() == FunEntryBlock;
322
+ }
323
+
324
+ static inline bool classof(const ICFGNode *node)
325
+ {
326
+ return node->getNodeKind() == FunEntryBlock;
327
+ }
328
+
329
+ static inline bool classof(const GenericICFGNodeTy *node)
330
+ {
331
+ return node->getNodeKind() == FunEntryBlock;
332
+ }
333
+
334
+ static inline bool classof(const SVFValue*node)
335
+ {
336
+ return node->getNodeKind() == FunEntryBlock;
337
+ }
338
+ //@}
339
+
340
+ const std::string toString() const override;
341
+
342
+ const std::string getSourceLoc() const override;
343
+ };
344
+
345
+ /*!
346
+ * Function exit ICFGNode containing (at most one) FormalRetVFGNodes of a function
347
+ */
348
+ class FunExitICFGNode : public InterICFGNode
349
+ {
350
+ friend class SVFIRWriter;
351
+ friend class SVFIRReader;
352
+
353
+ private:
354
+ const SVFVar *formalRet;
355
+
356
+ /// Constructor to create empty FunExitICFGNode (for SVFIRReader/deserialization)
357
+ FunExitICFGNode(NodeID id) : InterICFGNode(id, FunExitBlock), formalRet{} {}
358
+
359
+ public:
360
+ FunExitICFGNode(NodeID id, const FunObjVar* f);
361
+
362
+ /// Return function
363
+ inline const FunObjVar* getFun() const override
364
+ {
365
+ return fun;
366
+ }
367
+
368
+ /// Return formal return parameter
369
+ inline const SVFVar *getFormalRet() const
370
+ {
371
+ return formalRet;
372
+ }
373
+
374
+ /// Add formal return parameter
375
+ inline void addFormalRet(const SVFVar *fr)
376
+ {
377
+ formalRet = fr;
378
+ }
379
+
380
+ ///Methods for support type inquiry through isa, cast, and dyn_cast:
381
+ //@{
382
+ static inline bool classof(const FunEntryICFGNode *)
383
+ {
384
+ return true;
385
+ }
386
+
387
+ static inline bool classof(const ICFGNode *node)
388
+ {
389
+ return node->getNodeKind() == FunExitBlock;
390
+ }
391
+
392
+ static inline bool classof(const InterICFGNode *node)
393
+ {
394
+ return node->getNodeKind() == FunExitBlock;
395
+ }
396
+
397
+ static inline bool classof(const GenericICFGNodeTy *node)
398
+ {
399
+ return node->getNodeKind() == FunExitBlock;
400
+ }
401
+
402
+ static inline bool classof(const SVFValue*node)
403
+ {
404
+ return node->getNodeKind() == FunExitBlock;
405
+ }
406
+ //@}
407
+
408
+ const std::string toString() const override;
409
+
410
+ const std::string getSourceLoc() const override;
411
+ };
412
+
413
+ /*!
414
+ * Call ICFGNode containing a set of ActualParmVFGNodes at a callsite
415
+ */
416
+ class CallICFGNode : public InterICFGNode
417
+ {
418
+ friend class SVFIRWriter;
419
+ friend class SVFIRReader;
420
+
421
+ public:
422
+ typedef std::vector<const ValVar *> ActualParmNodeVec;
423
+
424
+ protected:
425
+ const RetICFGNode* ret;
426
+ ActualParmNodeVec APNodes; /// arguments
427
+ const FunObjVar* calledFunc; /// called function
428
+ bool isvararg; /// is variable argument
429
+ bool isVirCallInst; /// is virtual call inst
430
+ SVFVar* vtabPtr; /// virtual table pointer
431
+ s32_t virtualFunIdx; /// virtual function index of the virtual table(s) at a virtual call
432
+ std::string funNameOfVcall; /// the function name of this virtual call
433
+
434
+ /// Constructor to create empty CallICFGNode (for SVFIRReader/deserialization)
435
+ CallICFGNode(NodeID id) : InterICFGNode(id, FunCallBlock), ret{} {}
436
+
437
+ public:
438
+ CallICFGNode(NodeID id, const SVFBasicBlock* b, const SVFType* ty,
439
+ const FunObjVar* cf, bool iv, bool ivc, s32_t vfi,
440
+ const std::string& fnv)
441
+ : InterICFGNode(id, FunCallBlock), ret(nullptr), calledFunc(cf),
442
+ isvararg(iv), isVirCallInst(ivc), vtabPtr(nullptr),
443
+ virtualFunIdx(vfi), funNameOfVcall(fnv)
444
+ {
445
+ fun = b->getFunction();
446
+ bb = b;
447
+ type = ty;
448
+ }
449
+
450
+ /// Return callsite
451
+ inline const RetICFGNode* getRetICFGNode() const
452
+ {
453
+ assert(ret && "RetICFGNode not set?");
454
+ return ret;
455
+ }
456
+
457
+ /// Return callsite
458
+ inline void setRetICFGNode(const RetICFGNode* r)
459
+ {
460
+ ret = r;
461
+ }
462
+
463
+ /// Return callsite
464
+ inline const FunObjVar* getCaller() const
465
+ {
466
+ return getFun();
467
+ }
468
+
469
+ /// Return Basic Block
470
+ inline const SVFBasicBlock* getParent() const
471
+ {
472
+ return getBB();
473
+ }
474
+
475
+ /// Return true if this is an indirect call
476
+ inline bool isIndirectCall() const
477
+ {
478
+ return nullptr == calledFunc;
479
+ }
480
+
481
+ /// Return the set of actual parameters
482
+ inline const ActualParmNodeVec &getActualParms() const
483
+ {
484
+ return APNodes;
485
+ }
486
+
487
+ /// Add actual parameters
488
+ inline void addActualParms(const ValVar *ap)
489
+ {
490
+ APNodes.push_back(ap);
491
+ }
492
+ /// Parameter operations
493
+ //@{
494
+ inline const ValVar* getArgument(u32_t ArgNo) const
495
+ {
496
+ return getActualParms()[ArgNo];
497
+ }
498
+
499
+ inline u32_t arg_size() const
500
+ {
501
+ return APNodes.size();
502
+ }
503
+ inline bool arg_empty() const
504
+ {
505
+ return APNodes.empty();
506
+ }
507
+
508
+ inline u32_t getNumArgOperands() const
509
+ {
510
+ return arg_size();
511
+ }
512
+ inline const FunObjVar* getCalledFunction() const
513
+ {
514
+ return calledFunc;
515
+ }
516
+
517
+ inline bool isVarArg() const
518
+ {
519
+ return isvararg;
520
+ }
521
+ inline bool isVirtualCall() const
522
+ {
523
+ return isVirCallInst;
524
+ }
525
+
526
+ inline void setVtablePtr(SVFVar* v)
527
+ {
528
+ vtabPtr = v;
529
+ }
530
+
531
+ inline const SVFVar* getVtablePtr() const
532
+ {
533
+ assert(isVirtualCall() && "not a virtual call?");
534
+ return vtabPtr;
535
+ }
536
+
537
+
538
+ inline s32_t getFunIdxInVtable() const
539
+ {
540
+ assert(isVirtualCall() && "not a virtual call?");
541
+ assert(virtualFunIdx >=0 && "virtual function idx is less than 0? not set yet?");
542
+ return virtualFunIdx;
543
+ }
544
+
545
+ inline const std::string& getFunNameOfVirtualCall() const
546
+ {
547
+ assert(isVirtualCall() && "not a virtual call?");
548
+ return funNameOfVcall;
549
+ }
550
+ //@}
551
+
552
+ ///Methods for support type inquiry through isa, cast, and dyn_cast:
553
+ //@{
554
+ static inline bool classof(const CallICFGNode *)
555
+ {
556
+ return true;
557
+ }
558
+
559
+ static inline bool classof(const ICFGNode *node)
560
+ {
561
+ return node->getNodeKind() == FunCallBlock;
562
+ }
563
+
564
+ static inline bool classof(const InterICFGNode *node)
565
+ {
566
+ return node->getNodeKind() == FunCallBlock;
567
+ }
568
+
569
+ static inline bool classof(const GenericICFGNodeTy *node)
570
+ {
571
+ return node->getNodeKind() == FunCallBlock;
572
+ }
573
+
574
+ static inline bool classof(const SVFValue*node)
575
+ {
576
+ return node->getNodeKind() == FunCallBlock;
577
+ }
578
+ //@}
579
+
580
+ const std::string toString() const override;
581
+
582
+ const std::string getSourceLoc() const override
583
+ {
584
+ return "CallICFGNode: " + ICFGNode::getSourceLoc();
585
+ }
586
+ };
587
+
588
+
589
+ /*!
590
+ * Return ICFGNode containing (at most one) ActualRetVFGNode at a callsite
591
+ */
592
+ class RetICFGNode : public InterICFGNode
593
+ {
594
+ friend class SVFIRWriter;
595
+ friend class SVFIRReader;
596
+
597
+ private:
598
+ const SVFVar *actualRet;
599
+ const CallICFGNode* callBlockNode;
600
+
601
+ /// Constructor to create empty RetICFGNode (for SVFIRReader/deserialization)
602
+ RetICFGNode(NodeID id)
603
+ : InterICFGNode(id, FunRetBlock), actualRet{}, callBlockNode{}
604
+ {
605
+ }
606
+
607
+ public:
608
+ RetICFGNode(NodeID id, CallICFGNode* cb) :
609
+ InterICFGNode(id, FunRetBlock), actualRet(nullptr), callBlockNode(cb)
610
+ {
611
+ fun = cb->getFun();
612
+ bb = cb->getBB();
613
+ type = cb->getType();
614
+ }
615
+
616
+ inline const CallICFGNode* getCallICFGNode() const
617
+ {
618
+ return callBlockNode;
619
+ }
620
+ /// Return actual return parameter
621
+ inline const SVFVar *getActualRet() const
622
+ {
623
+ return actualRet;
624
+ }
625
+
626
+ /// Add actual return parameter
627
+ inline void addActualRet(const SVFVar *ar)
628
+ {
629
+ actualRet = ar;
630
+ }
631
+
632
+ ///Methods for support type inquiry through isa, cast, and dyn_cast:
633
+ //@{
634
+ static inline bool classof(const RetICFGNode *)
635
+ {
636
+ return true;
637
+ }
638
+
639
+ static inline bool classof(const InterICFGNode *node)
640
+ {
641
+ return node->getNodeKind() == FunRetBlock;
642
+ }
643
+
644
+ static inline bool classof(const ICFGNode *node)
645
+ {
646
+ return node->getNodeKind() == FunRetBlock;
647
+ }
648
+
649
+ static inline bool classof(const GenericICFGNodeTy *node)
650
+ {
651
+ return node->getNodeKind() == FunRetBlock;
652
+ }
653
+ static inline bool classof(const SVFValue*node)
654
+ {
655
+ return node->getNodeKind() == FunRetBlock;
656
+ }
657
+ //@}
658
+
659
+ const std::string toString() const override;
660
+
661
+ const std::string getSourceLoc() const override
662
+ {
663
+ return "RetICFGNode: " + ICFGNode::getSourceLoc();
664
+ }
665
+ };
666
+
667
+ } // End namespace SVF
668
+
669
+ #endif /* ICFGNode_H_ */