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,164 @@
1
+ //===- ICFGStat.h ----------------------------------------------------------//
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
+ * ICFGStat.h
24
+ *
25
+ * Created on: 12Sep.,2018
26
+ * Author: yulei
27
+ */
28
+
29
+ #ifndef INCLUDE_UTIL_ICFGSTAT_H_
30
+ #define INCLUDE_UTIL_ICFGSTAT_H_
31
+
32
+ #include "Util/PTAStat.h"
33
+ #include "Graphs/ICFG.h"
34
+ #include <iomanip>
35
+
36
+ namespace SVF
37
+ {
38
+
39
+ class ICFGStat : public PTAStat
40
+ {
41
+
42
+ private:
43
+ ICFG *icfg;
44
+ int numOfNodes;
45
+ int numOfCallNodes;
46
+ int numOfRetNodes;
47
+ int numOfEntryNodes;
48
+ int numOfExitNodes;
49
+ int numOfIntraNodes;
50
+
51
+ int numOfEdges;
52
+ int numOfCallEdges;
53
+ int numOfRetEdges;
54
+ int numOfIntraEdges;
55
+
56
+ public:
57
+ typedef Set<const ICFGNode *> ICFGNodeSet;
58
+
59
+ ICFGStat(ICFG *cfg) : PTAStat(nullptr), icfg(cfg)
60
+ {
61
+ numOfNodes = 0;
62
+ numOfCallNodes = 0;
63
+ numOfRetNodes = 0;
64
+ numOfEntryNodes = 0;
65
+ numOfExitNodes = 0;
66
+ numOfIntraNodes = 0;
67
+
68
+ numOfEdges = 0;
69
+ numOfCallEdges = 0;
70
+ numOfRetEdges = 0;
71
+ numOfIntraEdges = 0;
72
+
73
+ }
74
+
75
+ void performStat()
76
+ {
77
+
78
+ countStat();
79
+
80
+ PTNumStatMap["ICFGNode"] = numOfNodes;
81
+ PTNumStatMap["IntraICFGNode"] = numOfIntraNodes;
82
+ PTNumStatMap["CallICFGNode"] = numOfCallNodes;
83
+ PTNumStatMap["RetICFGNode"] = numOfRetNodes;
84
+ PTNumStatMap["FunEntryICFGNode"] = numOfEntryNodes;
85
+ PTNumStatMap["FunExitICFGNode"] = numOfExitNodes;
86
+
87
+ PTNumStatMap["ICFGEdge"] = numOfEdges;
88
+ PTNumStatMap["CallCFGEdge"] = numOfCallEdges;
89
+ PTNumStatMap["RetCFGEdge"] = numOfRetEdges;
90
+ PTNumStatMap["IntraCFGEdge"] = numOfIntraEdges;
91
+
92
+ printStat("ICFG Stat");
93
+ }
94
+
95
+ void performStatforIFDS()
96
+ {
97
+
98
+ countStat();
99
+ PTNumStatMap["ICFGNode(N)"] = numOfNodes;
100
+ PTNumStatMap["CallICFGNode(Call)"] = numOfCallNodes;
101
+ PTNumStatMap["ICFGEdge(E)"] = numOfEdges;
102
+ printStat("IFDS Stat");
103
+ }
104
+
105
+ void countStat()
106
+ {
107
+ ICFG::ICFGNodeIDToNodeMapTy::iterator it = icfg->begin();
108
+ ICFG::ICFGNodeIDToNodeMapTy::iterator eit = icfg->end();
109
+ for (; it != eit; ++it)
110
+ {
111
+ numOfNodes++;
112
+
113
+ ICFGNode *node = it->second;
114
+
115
+ if (SVFUtil::isa<IntraICFGNode>(node))
116
+ numOfIntraNodes++;
117
+ else if (SVFUtil::isa<CallICFGNode>(node))
118
+ numOfCallNodes++;
119
+ else if (SVFUtil::isa<RetICFGNode>(node))
120
+ numOfRetNodes++;
121
+ else if (SVFUtil::isa<FunEntryICFGNode>(node))
122
+ numOfEntryNodes++;
123
+ else if (SVFUtil::isa<FunExitICFGNode>(node))
124
+ numOfExitNodes++;
125
+
126
+
127
+ ICFGEdge::ICFGEdgeSetTy::iterator edgeIt =
128
+ it->second->OutEdgeBegin();
129
+ ICFGEdge::ICFGEdgeSetTy::iterator edgeEit =
130
+ it->second->OutEdgeEnd();
131
+ for (; edgeIt != edgeEit; ++edgeIt)
132
+ {
133
+ const ICFGEdge *edge = *edgeIt;
134
+ numOfEdges++;
135
+ if (edge->isCallCFGEdge())
136
+ numOfCallEdges++;
137
+ else if (edge->isRetCFGEdge())
138
+ numOfRetEdges++;
139
+ else if (edge->isIntraCFGEdge())
140
+ numOfIntraEdges++;
141
+ }
142
+ }
143
+ }
144
+
145
+ void printStat(std::string statname)
146
+ {
147
+
148
+ SVFUtil::outs() << "\n************ " << statname << " ***************\n";
149
+ SVFUtil::outs().flags(std::ios::left);
150
+ unsigned field_width = 20;
151
+ for(NUMStatMap::iterator it = PTNumStatMap.begin(), eit = PTNumStatMap.end(); it!=eit; ++it)
152
+ {
153
+ // format out put with width 20 space
154
+ SVFUtil::outs() << std::setw(field_width) << it->first << it->second << "\n";
155
+ }
156
+ PTNumStatMap.clear();
157
+ SVFUtil::outs().flush();
158
+ }
159
+ };
160
+
161
+ } // End namespace SVF
162
+
163
+ #endif /* INCLUDE_UTIL_ICFGSTAT_H_ */
164
+
@@ -0,0 +1,398 @@
1
+ //===- SVFIR.h -- SVF IR Graph or PAG (Program Assignment Graph)--------------//
2
+ //
3
+ // SVF: Static Value-Flow Analysis
4
+ //
5
+ // Copyright (C) <2013-2017> <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
+ * IRGraph.h
25
+ *
26
+ * Created on: Nov 1, 2013
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+
31
+ #ifndef IRGRAPH_H_
32
+ #define IRGRAPH_H_
33
+
34
+ #include "SVFIR/SVFStatements.h"
35
+ #include "SVFIR/SVFVariables.h"
36
+ #include "Util/NodeIDAllocator.h"
37
+ #include "Util/SVFUtil.h"
38
+ #include "Graphs/ICFG.h"
39
+
40
+ namespace SVF
41
+ {
42
+ typedef SVFVar PAGNode;
43
+ typedef SVFStmt PAGEdge;
44
+
45
+ class ObjTypeInfo;
46
+
47
+ /*
48
+ * Graph representation of SVF IR.
49
+ * It can be seen as a program assignment graph (PAG).
50
+ */
51
+ class IRGraph : public GenericGraph<SVFVar, SVFStmt>
52
+ {
53
+ friend class SVFIRWriter;
54
+ friend class SVFIRReader;
55
+ friend class SVFIRBuilder;
56
+ friend class SymbolTableBuilder;
57
+
58
+ public:
59
+
60
+ /// Symbol types
61
+ enum SYMTYPE
62
+ {
63
+ NullPtr,
64
+ BlkPtr,
65
+ BlackHole,
66
+ ConstantObj,
67
+ ValSymbol,
68
+ ObjSymbol,
69
+ RetSymbol,
70
+ VarargSymbol
71
+ };
72
+
73
+ /// various maps defined
74
+ //{@
75
+ /// sym id to obj type info map
76
+ typedef OrderedMap<NodeID, ObjTypeInfo*> IDToTypeInfoMapTy;
77
+
78
+ /// function to sym id map
79
+ typedef OrderedMap<const FunObjVar*, NodeID> FunObjVarToIDMapTy;
80
+
81
+ /// struct type to struct info map
82
+ typedef Set<const SVFType*> SVFTypeSet;
83
+ //@}
84
+
85
+ private:
86
+ FunObjVarToIDMapTy returnFunObjSymMap; ///< return map
87
+ FunObjVarToIDMapTy varargFunObjSymMap; ///< vararg map
88
+ IDToTypeInfoMapTy objTypeInfoMap; ///< map a memory sym id to its obj
89
+
90
+ /// (owned) All SVF Types
91
+ /// Every type T is mapped to StInfo
92
+ /// which contains size (fsize) , offset(foffset)
93
+ /// fsize[i] is the number of fields in the largest such struct, else fsize[i] = 1.
94
+ /// fsize[0] is always the size of the expanded struct.
95
+ SVFTypeSet svfTypes;
96
+
97
+ /// @brief (owned) All StInfo
98
+ Set<const StInfo*> stInfos;
99
+
100
+ /// total number of symbols
101
+ NodeID totalSymNum;
102
+
103
+ void destorySymTable();
104
+
105
+ public:
106
+ typedef Set<const SVFStmt*> SVFStmtSet;
107
+
108
+ protected:
109
+ SVFStmt::KindToSVFStmtMapTy KindToSVFStmtSetMap; ///< SVFIR edge map containing all PAGEdges
110
+ SVFStmt::KindToSVFStmtMapTy KindToPTASVFStmtSetMap; ///< SVFIR edge map containing only pointer-related edges, i.e., both LHS and RHS are of pointer type
111
+ bool fromFile; ///< Whether the SVFIR is built according to user specified data from a txt file
112
+ NodeID nodeNumAfterPAGBuild; ///< initial node number after building SVFIR, excluding later added nodes, e.g., gepobj nodes
113
+ u32_t totalPTAPAGEdge;
114
+ u32_t valVarNum;
115
+ u32_t objVarNum;
116
+
117
+ /// Add a node into the graph
118
+ inline NodeID addNode(SVFVar* node)
119
+ {
120
+ assert(node && "cannot add a null node");
121
+ addGNode(node->getId(),node);
122
+ return node->getId();
123
+ }
124
+ /// Add an edge into the graph
125
+ bool addEdge(SVFVar* src, SVFVar* dst, SVFStmt* edge);
126
+
127
+ //// Return true if this edge exits
128
+ SVFStmt* hasNonlabeledEdge(SVFVar* src, SVFVar* dst, SVFStmt::PEDGEK kind);
129
+ /// Return true if this labeled edge exits, including store, call and load
130
+ /// two store edge can have same dst and src but located in different basic
131
+ /// blocks, thus flags are needed to distinguish them
132
+ SVFStmt* hasLabeledEdge(SVFVar* src, SVFVar* dst, SVFStmt::PEDGEK kind,
133
+ const ICFGNode* cs);
134
+ /// Return MultiOpndStmt since it has more than one operands (we use operand
135
+ /// 2 here to make the flag)
136
+ SVFStmt* hasLabeledEdge(SVFVar* src, SVFVar* op1, SVFStmt::PEDGEK kind,
137
+ const SVFVar* op2);
138
+
139
+ public:
140
+ IRGraph(bool buildFromFile)
141
+ : totalSymNum(0), fromFile(buildFromFile), nodeNumAfterPAGBuild(0), totalPTAPAGEdge(0), valVarNum(0), objVarNum(0),
142
+ maxStruct(nullptr), maxStSize(0)
143
+ {
144
+ }
145
+
146
+ virtual ~IRGraph();
147
+
148
+
149
+ /// Whether this SVFIR built from a txt file
150
+ inline bool isBuiltFromFile()
151
+ {
152
+ return fromFile;
153
+ }
154
+
155
+ /// special value
156
+ // @{
157
+ static inline bool isBlkPtr(NodeID id)
158
+ {
159
+ return (id == BlkPtr);
160
+ }
161
+ static inline bool isNullPtr(NodeID id)
162
+ {
163
+ return (id == NullPtr);
164
+ }
165
+ static inline bool isBlkObj(NodeID id)
166
+ {
167
+ return (id == BlackHole);
168
+ }
169
+ static inline bool isConstantSym(NodeID id)
170
+ {
171
+ return (id == ConstantObj);
172
+ }
173
+ static inline bool isBlkObjOrConstantObj(NodeID id)
174
+ {
175
+ return (isBlkObj(id) || isConstantSym(id));
176
+ }
177
+
178
+ inline NodeID blkPtrSymID() const
179
+ {
180
+ return BlkPtr;
181
+ }
182
+
183
+ inline NodeID nullPtrSymID() const
184
+ {
185
+ return NullPtr;
186
+ }
187
+
188
+ inline NodeID constantSymID() const
189
+ {
190
+ return ConstantObj;
191
+ }
192
+
193
+ inline NodeID blackholeSymID() const
194
+ {
195
+ return BlackHole;
196
+ }
197
+
198
+ /// Statistics
199
+ //@{
200
+ inline u32_t getTotalSymNum() const
201
+ {
202
+ return totalSymNum;
203
+ }
204
+ inline u32_t getMaxStructSize() const
205
+ {
206
+ return maxStSize;
207
+ }
208
+ //@}
209
+
210
+ /// Get different kinds of syms maps
211
+ //@{
212
+ inline IDToTypeInfoMapTy& idToObjTypeInfoMap()
213
+ {
214
+ return objTypeInfoMap;
215
+ }
216
+
217
+ inline const IDToTypeInfoMapTy& idToObjTypeInfoMap() const
218
+ {
219
+ return objTypeInfoMap;
220
+ }
221
+
222
+ inline FunObjVarToIDMapTy& retFunObjSyms()
223
+ {
224
+ return returnFunObjSymMap;
225
+ }
226
+
227
+ inline FunObjVarToIDMapTy& varargFunObjSyms()
228
+ {
229
+ return varargFunObjSymMap;
230
+ }
231
+
232
+ //@}
233
+
234
+ inline ObjTypeInfo* getObjTypeInfo(NodeID id) const
235
+ {
236
+ IDToTypeInfoMapTy::const_iterator iter = objTypeInfoMap.find(id);
237
+ assert(iter!=objTypeInfoMap.end() && "obj type info not found");
238
+ return iter->second;
239
+ }
240
+
241
+ /// GetReturnNode - Return the unique node representing the return value of a function
242
+ NodeID getReturnNode(const FunObjVar*func) const;
243
+
244
+ /// getVarargNode - Return the unique node representing the variadic argument of a variadic function.
245
+ NodeID getVarargNode(const FunObjVar*func) const;
246
+
247
+ inline NodeID getBlackHoleNode() const
248
+ {
249
+ return blackholeSymID();
250
+ }
251
+ inline NodeID getConstantNode() const
252
+ {
253
+ return constantSymID();
254
+ }
255
+ inline NodeID getBlkPtr() const
256
+ {
257
+ return blkPtrSymID();
258
+ }
259
+ inline NodeID getNullPtr() const
260
+ {
261
+ return nullPtrSymID();
262
+ }
263
+
264
+ u32_t getValueNodeNum();
265
+
266
+ u32_t getObjectNodeNum();
267
+
268
+ /// Constant reader that won't change the state of the symbol table
269
+ //@{
270
+ inline const SVFTypeSet& getSVFTypes() const
271
+ {
272
+ return svfTypes;
273
+ }
274
+
275
+ inline const Set<const StInfo*>& getStInfos() const
276
+ {
277
+ return stInfos;
278
+ }
279
+ //@}
280
+ /// Given an offset from a Gep Instruction, return it modulus offset by considering memory layout
281
+ virtual APOffset getModulusOffset(const BaseObjVar* baseObj, const APOffset& apOffset);
282
+ /// Get struct info
283
+ //@{
284
+ ///Get a reference to StructInfo.
285
+ const StInfo* getTypeInfo(const SVFType* T) const;
286
+ inline bool hasSVFTypeInfo(const SVFType* T)
287
+ {
288
+ return svfTypes.find(T) != svfTypes.end();
289
+ }
290
+
291
+ /// Create an objectInfo based on LLVM type (value is null, and type could be null, representing a dummy object)
292
+ ObjTypeInfo* createObjTypeInfo(const SVFType* type);
293
+
294
+ const ObjTypeInfo* createDummyObjTypeInfo(NodeID symId, const SVFType* type);
295
+
296
+ ///Get a reference to the components of struct_info.
297
+ /// Number of flattened elements of an array or struct
298
+ u32_t getNumOfFlattenElements(const SVFType* T);
299
+ /// Flattened element idx of an array or struct by considering stride
300
+ u32_t getFlattenedElemIdx(const SVFType* T, u32_t origId);
301
+ /// Return the type of a flattened element given a flattened index
302
+ const SVFType* getFlatternedElemType(const SVFType* baseType, u32_t flatten_idx);
303
+ /// struct A { int id; int salary; }; struct B { char name[20]; struct A a;} B b;
304
+ /// OriginalElemType of b with field_idx 1 : Struct A
305
+ /// FlatternedElemType of b with field_idx 1 : int
306
+ const SVFType* getOriginalElemType(const SVFType* baseType, u32_t origId) const;
307
+ //@}
308
+
309
+ /// Debug method
310
+ void printFlattenFields(const SVFType* type);
311
+
312
+
313
+ inline u32_t getNodeNumAfterPAGBuild() const
314
+ {
315
+ return nodeNumAfterPAGBuild;
316
+ }
317
+ inline void setNodeNumAfterPAGBuild(u32_t num)
318
+ {
319
+ nodeNumAfterPAGBuild = num;
320
+ }
321
+
322
+ inline u32_t getPAGNodeNum() const
323
+ {
324
+ return nodeNum;
325
+ }
326
+ inline u32_t getPAGEdgeNum() const
327
+ {
328
+ return edgeNum;
329
+ }
330
+ inline u32_t getPTAPAGEdgeNum() const
331
+ {
332
+ return totalPTAPAGEdge;
333
+ }
334
+ /// Return graph name
335
+ inline std::string getGraphName() const
336
+ {
337
+ return "SVFIR";
338
+ }
339
+
340
+ void dumpSymTable();
341
+
342
+ /// Dump SVFIR
343
+ void dump(std::string name);
344
+
345
+ /// View graph from the debugger
346
+ void view();
347
+
348
+
349
+
350
+ ///The struct type with the most fields
351
+ const SVFType* maxStruct;
352
+
353
+ ///The number of fields in max_struct
354
+ u32_t maxStSize;
355
+
356
+ inline void addTypeInfo(const SVFType* ty)
357
+ {
358
+ bool inserted = svfTypes.insert(ty).second;
359
+ if(!inserted)
360
+ assert(false && "this type info has been added before");
361
+ }
362
+
363
+ inline void addStInfo(StInfo* stInfo)
364
+ {
365
+ stInfos.insert(stInfo);
366
+ }
367
+
368
+ protected:
369
+
370
+ /// Return the flattened field type for struct type only
371
+ const std::vector<const SVFType*>& getFlattenFieldTypes(const SVFStructType *T);
372
+ };
373
+
374
+ }
375
+
376
+ namespace SVF
377
+ {
378
+
379
+ /* !
380
+ * GenericGraphTraits specializations of SVFIR to be used for the generic graph algorithms.
381
+ * Provide graph traits for traversing from a SVFIR node using standard graph traversals.
382
+ */
383
+ template<> struct GenericGraphTraits<SVF::SVFVar*> : public GenericGraphTraits<SVF::GenericNode<SVF::SVFVar,SVF::SVFStmt>* >
384
+ {
385
+ };
386
+
387
+ /// Inverse GenericGraphTraits specializations for SVFIR node, it is used for inverse traversal.
388
+ template<> struct GenericGraphTraits<Inverse<SVF::SVFVar *> > : public GenericGraphTraits<Inverse<SVF::GenericNode<SVF::SVFVar,SVF::SVFStmt>* > >
389
+ {
390
+ };
391
+
392
+ template<> struct GenericGraphTraits<SVF::IRGraph*> : public GenericGraphTraits<SVF::GenericGraph<SVF::SVFVar,SVF::SVFStmt>* >
393
+ {
394
+ typedef SVF::SVFVar* NodeRef;
395
+ };
396
+
397
+ } // End namespace llvm
398
+ #endif /* IRGRAPH_H_ */