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,214 @@
1
+ //===- CoreBitVector.h -- Dynamically sized bit vector data structure ------------//
2
+
3
+ /*
4
+ * CoreBitVector.h
5
+ *
6
+ * Contiguous bit vector which resizes as required by common operations.
7
+ *
8
+ * Created on: Jan 31, 2021
9
+ * Author: Mohamad Barbar
10
+ */
11
+
12
+ #ifndef COREBITVECTOR_H_
13
+ #define COREBITVECTOR_H_
14
+
15
+ #include <assert.h>
16
+ #include <vector>
17
+
18
+ #include "SVFIR/SVFType.h"
19
+
20
+ namespace SVF
21
+ {
22
+
23
+ /// A contiguous bit vector that only contains what it needs according
24
+ /// to the operations carried. For example, when two bit vectors are unioned,
25
+ /// their sizes may be increased to fit all the bits from the other set.
26
+ /// This implementation never shrinks. Since points-to sets (generally) grow
27
+ /// monotonically, does not have too big an impact on points-to analysis and
28
+ /// so it isn't implemented.
29
+ /// Abbreviated CBV.
30
+ class CoreBitVector
31
+ {
32
+ public:
33
+ typedef unsigned long long Word;
34
+ static const size_t WordSize;
35
+
36
+ class CoreBitVectorIterator;
37
+ typedef CoreBitVectorIterator const_iterator;
38
+ typedef const_iterator iterator;
39
+
40
+ public:
41
+ /// Construct empty CBV.
42
+ CoreBitVector(void);
43
+
44
+ /// Construct empty CBV with space reserved for n Words.
45
+ CoreBitVector(size_t n);
46
+
47
+ /// Copy constructor.
48
+ CoreBitVector(const CoreBitVector &cbv);
49
+
50
+ /// Move constructor.
51
+ CoreBitVector(CoreBitVector &&cbv);
52
+
53
+ /// Copy assignment.
54
+ CoreBitVector &operator=(const CoreBitVector &rhs);
55
+
56
+ /// Move assignment.
57
+ CoreBitVector &operator=(CoreBitVector &&rhs);
58
+
59
+ /// Returns true if no bits are set.
60
+ bool empty(void) const;
61
+
62
+ /// Returns number of bits set.
63
+ u32_t count(void) const;
64
+
65
+ /// Empty the CBV.
66
+ void clear(void);
67
+
68
+ /// Returns true if bit is set in this CBV.
69
+ bool test(u32_t bit) const;
70
+
71
+ /// Check if bit is set. If it is, returns false.
72
+ /// Otherwise, sets bit and returns true.
73
+ bool test_and_set(u32_t bit);
74
+
75
+ /// Sets bit in the CBV.
76
+ void set(u32_t bit);
77
+
78
+ /// Resets bit in the CBV.
79
+ void reset(u32_t bit);
80
+
81
+ /// Returns true if this CBV is a superset of rhs.
82
+ bool contains(const CoreBitVector &rhs) const;
83
+
84
+ /// Returns true if this CBV and rhs share any set bits.
85
+ bool intersects(const CoreBitVector &rhs) const;
86
+
87
+ /// Returns true if this CBV and rhs have the same bits set.
88
+ bool operator==(const CoreBitVector &rhs) const;
89
+
90
+ /// Returns true if either this CBV or rhs has a bit set unique to the other.
91
+ bool operator!=(const CoreBitVector &rhs) const;
92
+
93
+ /// Put union of this CBV and rhs into this CBV.
94
+ /// Returns true if CBV changed.
95
+ bool operator|=(const CoreBitVector &rhs);
96
+
97
+ /// Put intersection of this CBV and rhs into this CBV.
98
+ /// Returns true if CBV changed.
99
+ bool operator&=(const CoreBitVector &rhs);
100
+
101
+ /// Remove set bits in rhs from this CBV.
102
+ /// Returns true if CBV changed.
103
+ bool operator-=(const CoreBitVector &rhs);
104
+
105
+ /// Put intersection of this CBV with complement of rhs into this CBV.
106
+ /// Returns true if this CBV changed.
107
+ bool intersectWithComplement(const CoreBitVector &rhs);
108
+
109
+ /// Put intersection of lhs with complement of rhs into this CBV.
110
+ void intersectWithComplement(const CoreBitVector &lhs, const CoreBitVector &rhs);
111
+
112
+ /// Hash for this CBV.
113
+ size_t hash(void) const;
114
+
115
+ const_iterator begin(void) const;
116
+ const_iterator end(void) const;
117
+
118
+ private:
119
+ /// Add enough words (prepend) to be able to include bit.
120
+ void extendBackward(u32_t bit);
121
+
122
+ /// Add enough words (append) to be able to include bit.
123
+ void extendForward(u32_t bit);
124
+
125
+ /// Add enough words (append xor prepend) to be able to include bit.
126
+ void extendTo(u32_t bit);
127
+
128
+ /// Returns the index into words which would hold bit.
129
+ size_t indexForBit(u32_t bit) const;
130
+
131
+ /// Returns true if bit can fit in this CBV without resizing.
132
+ bool canHold(u32_t bit) const;
133
+
134
+ /// Returns the last bit that this CBV can hold.
135
+ u32_t finalBit(void) const;
136
+
137
+ /// Returns the first bit position that both this CBV and rhs *can* hold.
138
+ u32_t firstCommonBit(const CoreBitVector &rhs) const;
139
+
140
+ /// Returns the next index in the words array at or after start which contains
141
+ /// set bits. This index and start are indices into the words array not
142
+ /// accounting for the offset. Returns a value greater than or equal to
143
+ /// words.size() when there are no more set bits.
144
+ size_t nextSetIndex(const size_t start) const;
145
+
146
+ public:
147
+ class CoreBitVectorIterator
148
+ {
149
+ public:
150
+ using iterator_category = std::forward_iterator_tag;
151
+ using value_type = u32_t;
152
+ using difference_type = std::ptrdiff_t;
153
+ using pointer = u32_t *;
154
+ using reference = u32_t &;
155
+
156
+ CoreBitVectorIterator(void) = delete;
157
+
158
+ /// Returns an iterator to the beginning of cbv if end is false, and to
159
+ /// the end of cbv if end is true.
160
+ CoreBitVectorIterator(const CoreBitVector *cbv, bool end=false);
161
+
162
+ CoreBitVectorIterator(const CoreBitVectorIterator &cbv) = default;
163
+ CoreBitVectorIterator(CoreBitVectorIterator &&cbv) = default;
164
+
165
+ CoreBitVectorIterator &operator=(const CoreBitVectorIterator &cbv) = default;
166
+ CoreBitVectorIterator &operator=(CoreBitVectorIterator &&cbv) = default;
167
+
168
+ /// Pre-increment: ++it.
169
+ const CoreBitVectorIterator &operator++(void);
170
+
171
+ /// Post-increment: it++.
172
+ const CoreBitVectorIterator operator++(int);
173
+
174
+ /// Dereference: *it.
175
+ u32_t operator*(void) const;
176
+
177
+ /// Equality: *this == rhs.
178
+ bool operator==(const CoreBitVectorIterator &rhs) const;
179
+
180
+ /// Inequality: *this != rhs.
181
+ bool operator!=(const CoreBitVectorIterator &rhs) const;
182
+
183
+ private:
184
+ bool atEnd(void) const;
185
+
186
+ private:
187
+ /// CoreBitVector we are iterating over.
188
+ const CoreBitVector *cbv;
189
+ /// Word in words we are looking at.
190
+ std::vector<Word>::const_iterator wordIt;
191
+ /// Current bit in wordIt we are looking at
192
+ /// (index into *wordIt).
193
+ u32_t bit;
194
+ };
195
+
196
+ private:
197
+ /// The first bit of the first word.
198
+ u32_t offset;
199
+ /// Our actual bit vector.
200
+ std::vector<Word> words;
201
+ };
202
+
203
+ template <>
204
+ struct Hash<CoreBitVector>
205
+ {
206
+ size_t operator()(const CoreBitVector &cbv) const
207
+ {
208
+ return cbv.hash();
209
+ }
210
+ };
211
+
212
+ } // End namespace SVF
213
+
214
+ #endif // COREBITVECTOR_H_
@@ -0,0 +1,502 @@
1
+ //===- CxtStmt.h -- Context- and Thread-Sensitive Statement-------------------//
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
+ * CxtStmt.h
25
+ *
26
+ * Created on: Jan 21, 2014
27
+ * Author: Yulei Sui
28
+ */
29
+
30
+ #ifndef INCLUDE_UTIL_CXTSTMT_H_
31
+ #define INCLUDE_UTIL_CXTSTMT_H_
32
+
33
+ #include "SVFIR/SVFValue.h"
34
+
35
+ namespace SVF
36
+ {
37
+
38
+ class ICFGNode;
39
+ /*!
40
+ * Context-sensitive thread statement <c,s>
41
+ */
42
+ class CxtStmt
43
+ {
44
+ public:
45
+ /// Constructor
46
+ CxtStmt(const CallStrCxt& c, const ICFGNode* f) :cxt(c), inst(f)
47
+ {
48
+ }
49
+ /// Copy constructor
50
+ CxtStmt(const CxtStmt& ctm) : cxt(ctm.getContext()),inst(ctm.getStmt())
51
+ {
52
+ }
53
+ /// Destructor
54
+ virtual ~CxtStmt()
55
+ {
56
+ }
57
+ /// Return current context
58
+ inline const CallStrCxt& getContext() const
59
+ {
60
+ return cxt;
61
+ }
62
+ /// Return current statement
63
+ inline const ICFGNode* getStmt() const
64
+ {
65
+ return inst;
66
+ }
67
+ /// Enable compare operator to avoid duplicated item insertion in map or set
68
+ /// to be noted that two vectors can also overload operator()
69
+ inline bool operator< (const CxtStmt& rhs) const
70
+ {
71
+ if(inst!=rhs.getStmt())
72
+ return inst < rhs.getStmt();
73
+ else
74
+ return cxt < rhs.getContext();
75
+ }
76
+ /// Overloading operator=
77
+ inline CxtStmt& operator= (const CxtStmt& rhs)
78
+ {
79
+ if(*this!=rhs)
80
+ {
81
+ inst = rhs.getStmt();
82
+ cxt = rhs.getContext();
83
+ }
84
+ return *this;
85
+ }
86
+ /// Overloading operator==
87
+ inline bool operator== (const CxtStmt& rhs) const
88
+ {
89
+ return (inst == rhs.getStmt() && cxt == rhs.getContext());
90
+ }
91
+ /// Overloading operator==
92
+ inline bool operator!= (const CxtStmt& rhs) const
93
+ {
94
+ return !(*this==rhs);
95
+ }
96
+ /// Return context in string format
97
+ inline std::string cxtToStr() const
98
+ {
99
+ std::string str;
100
+ std::stringstream rawstr(str);
101
+ rawstr << "[:";
102
+ for(CallStrCxt::const_iterator it = cxt.begin(), eit = cxt.end(); it!=eit; ++it)
103
+ {
104
+ rawstr << *it << " ";
105
+ }
106
+ rawstr << " ]";
107
+ return rawstr.str();
108
+ }
109
+ /// Dump CxtStmt
110
+ inline void dump() const
111
+ {
112
+ SVFUtil::outs() << "[ Current Stmt: " << inst->toString() << "\t Contexts: " << cxtToStr() << " ]\n";
113
+ }
114
+
115
+ protected:
116
+ CallStrCxt cxt;
117
+ const ICFGNode* inst;
118
+ };
119
+
120
+
121
+ /*!
122
+ * Context-sensitive thread statement <t,c,s>
123
+ */
124
+ class CxtThreadStmt : public CxtStmt
125
+ {
126
+ public:
127
+ /// Constructor
128
+ CxtThreadStmt(NodeID t, const CallStrCxt& c, const ICFGNode* f) :CxtStmt(c,f), tid(t)
129
+ {
130
+ }
131
+ /// Copy constructor
132
+ CxtThreadStmt(const CxtThreadStmt& ctm) :CxtStmt(ctm), tid(ctm.getTid())
133
+ {
134
+ }
135
+ /// Destructor
136
+ virtual ~CxtThreadStmt()
137
+ {
138
+ }
139
+ /// Return current context
140
+ inline NodeID getTid() const
141
+ {
142
+ return tid;
143
+ }
144
+ /// Enable compare operator to avoid duplicated item insertion in map or set
145
+ /// to be noted that two vectors can also overload operator()
146
+ inline bool operator< (const CxtThreadStmt& rhs) const
147
+ {
148
+ if (tid != rhs.getTid())
149
+ return tid < rhs.getTid();
150
+ else if(inst!=rhs.getStmt())
151
+ return inst < rhs.getStmt();
152
+ else
153
+ return cxt < rhs.getContext();
154
+ }
155
+ /// Overloading operator=
156
+ inline CxtThreadStmt& operator= (const CxtThreadStmt& rhs)
157
+ {
158
+ if(*this!=rhs)
159
+ {
160
+ CxtStmt::operator=(rhs);
161
+ tid = rhs.getTid();
162
+ }
163
+ return *this;
164
+ }
165
+ /// Overloading operator==
166
+ inline bool operator== (const CxtThreadStmt& rhs) const
167
+ {
168
+ return (tid == rhs.getTid() && inst == rhs.getStmt() && cxt == rhs.getContext());
169
+ }
170
+ /// Overloading operator==
171
+ inline bool operator!= (const CxtThreadStmt& rhs) const
172
+ {
173
+ return !(*this==rhs);
174
+ }
175
+ /// Dump CxtThreadStmt
176
+ inline void dump() const
177
+ {
178
+ SVFUtil::outs() << "[ Current Thread id: " << tid << " Stmt: " << inst->toString() << "\t Contexts: " << cxtToStr() << " ]\n";
179
+ }
180
+
181
+ private:
182
+ NodeID tid;
183
+ };
184
+
185
+
186
+ /*!
187
+ * Context-sensitive thread <c,t>
188
+ */
189
+ class CxtThread
190
+ {
191
+ public:
192
+ /// Constructor
193
+ CxtThread(const CallStrCxt& c, const ICFGNode* fork) : cxt(c), forksite(fork), inloop(false), incycle(false)
194
+ {
195
+ }
196
+ /// Copy constructor
197
+ CxtThread(const CxtThread& ct) :
198
+ cxt(ct.getContext()), forksite(ct.getThread()), inloop(ct.isInloop()), incycle(ct.isIncycle())
199
+ {
200
+ }
201
+ /// Destructor
202
+ virtual ~CxtThread()
203
+ {
204
+ }
205
+ /// Return context of the thread
206
+ inline const CallStrCxt& getContext() const
207
+ {
208
+ return cxt;
209
+ }
210
+ /// Return forksite
211
+ inline const ICFGNode* getThread() const
212
+ {
213
+ return forksite;
214
+ }
215
+ /// Enable compare operator to avoid duplicated item insertion in map or set
216
+ /// to be noted that two vectors can also overload operator()
217
+ inline bool operator< (const CxtThread& rhs) const
218
+ {
219
+ if (forksite != rhs.getThread())
220
+ return forksite < rhs.getThread();
221
+ else
222
+ return cxt < rhs.getContext();
223
+ }
224
+ /// Overloading operator=
225
+ inline CxtThread& operator= (const CxtThread& rhs)
226
+ {
227
+ if(*this!=rhs)
228
+ {
229
+ forksite = rhs.getThread();
230
+ cxt = rhs.getContext();
231
+ }
232
+ return *this;
233
+ }
234
+ /// Overloading operator==
235
+ inline bool operator== (const CxtThread& rhs) const
236
+ {
237
+ return (forksite == rhs.getThread() && cxt == rhs.getContext());
238
+ }
239
+ /// Overloading operator==
240
+ inline bool operator!= (const CxtThread& rhs) const
241
+ {
242
+ return !(*this==rhs);
243
+ }
244
+ /// Return context in string format
245
+ inline std::string cxtToStr() const
246
+ {
247
+ std::string str;
248
+ std::stringstream rawstr(str);
249
+ rawstr << "[:";
250
+ for(CallStrCxt::const_iterator it = cxt.begin(), eit = cxt.end(); it!=eit; ++it)
251
+ {
252
+ rawstr << *it << " ";
253
+ }
254
+ rawstr << " ]";
255
+ return rawstr.str();
256
+ }
257
+
258
+ /// inloop, incycle attributes
259
+ //@{
260
+ inline void setInloop(bool in)
261
+ {
262
+ inloop = in;
263
+ }
264
+ inline bool isInloop() const
265
+ {
266
+ return inloop;
267
+ }
268
+ inline void setIncycle(bool in)
269
+ {
270
+ incycle = in;
271
+ }
272
+ inline bool isIncycle() const
273
+ {
274
+ return incycle;
275
+ }
276
+ //@}
277
+
278
+ /// Dump CxtThread
279
+ inline void dump() const
280
+ {
281
+ std::string loop = inloop?", inloop":"";
282
+ std::string cycle = incycle?", incycle":"";
283
+
284
+ if(forksite)
285
+ {
286
+ SVFUtil::outs() << "[ Thread: "
287
+ << forksite->toString() << "\t Contexts: " << cxtToStr()
288
+ << loop << cycle <<" ]\n";
289
+ }
290
+ else
291
+ {
292
+ SVFUtil::outs() << "[ Thread: " << "main " << "\t Contexts: " << cxtToStr()
293
+ << loop << cycle <<" ]\n";
294
+ }
295
+ }
296
+ protected:
297
+ CallStrCxt cxt;
298
+ const ICFGNode* forksite;
299
+ bool inloop;
300
+ bool incycle;
301
+ };
302
+
303
+
304
+ /*!
305
+ * Context-sensitive procedure <c,m>
306
+ * c represent current context
307
+ * m represent current procedure
308
+ */
309
+ class CxtProc
310
+ {
311
+ public:
312
+ /// Constructor
313
+ CxtProc(const CallStrCxt& c, const FunObjVar* f) :
314
+ cxt(c), fun(f)
315
+ {
316
+ }
317
+ /// Copy constructor
318
+ CxtProc(const CxtProc& ctm) :
319
+ cxt(ctm.getContext()), fun(ctm.getProc())
320
+ {
321
+ }
322
+ /// Destructor
323
+ virtual ~CxtProc()
324
+ {
325
+ }
326
+ /// Return current procedure
327
+ inline const FunObjVar* getProc() const
328
+ {
329
+ return fun;
330
+ }
331
+ /// Return current context
332
+ inline const CallStrCxt& getContext() const
333
+ {
334
+ return cxt;
335
+ }
336
+ /// Enable compare operator to avoid duplicated item insertion in map or set
337
+ /// to be noted that two vectors can also overload operator()
338
+ inline bool operator<(const CxtProc& rhs) const
339
+ {
340
+ if (fun != rhs.getProc())
341
+ return fun < rhs.getProc();
342
+ else
343
+ return cxt < rhs.getContext();
344
+ }
345
+ /// Overloading operator=
346
+ inline CxtProc& operator=(const CxtProc& rhs)
347
+ {
348
+ if (*this != rhs)
349
+ {
350
+ fun = rhs.getProc();
351
+ cxt = rhs.getContext();
352
+ }
353
+ return *this;
354
+ }
355
+ /// Overloading operator==
356
+ inline bool operator==(const CxtProc& rhs) const
357
+ {
358
+ return (fun == rhs.getProc() && cxt == rhs.getContext());
359
+ }
360
+ /// Overloading operator==
361
+ inline bool operator!=(const CxtProc& rhs) const
362
+ {
363
+ return !(*this == rhs);
364
+ }
365
+ /// Return context in string format
366
+ inline std::string cxtToStr() const
367
+ {
368
+ std::string str;
369
+ std::stringstream rawstr(str);
370
+ rawstr << "[:";
371
+ for (CallStrCxt::const_iterator it = cxt.begin(), eit = cxt.end(); it != eit; ++it)
372
+ {
373
+ rawstr << *it << " ";
374
+ }
375
+ rawstr << " ]";
376
+ return rawstr.str();
377
+ }
378
+ /// Dump CxtProc
379
+ inline void dump() const
380
+ {
381
+ SVFUtil::outs() << "[ Proc: " << fun->getName() << "\t Contexts: " << cxtToStr() << " ]\n";
382
+ }
383
+
384
+ protected:
385
+ CallStrCxt cxt;
386
+ const FunObjVar* fun;
387
+ };
388
+
389
+
390
+ /*!
391
+ * Context-sensitive procedure <t,c,m>
392
+ * t represent current thread during traversing
393
+ * c represent current context
394
+ * m represent current procedure
395
+ */
396
+ class CxtThreadProc : public CxtProc
397
+ {
398
+ public:
399
+ /// Constructor
400
+ CxtThreadProc(NodeID t, const CallStrCxt& c, const FunObjVar* f) :CxtProc(c,f),tid(t)
401
+ {
402
+ }
403
+ /// Copy constructor
404
+ CxtThreadProc(const CxtThreadProc& ctm) : CxtProc(ctm.getContext(),ctm.getProc()), tid(ctm.getTid())
405
+ {
406
+ }
407
+ /// Destructor
408
+ virtual ~CxtThreadProc()
409
+ {
410
+ }
411
+ /// Return current thread id
412
+ inline NodeID getTid() const
413
+ {
414
+ return tid;
415
+ }
416
+ /// Enable compare operator to avoid duplicated item insertion in map or set
417
+ /// to be noted that two vectors can also overload operator()
418
+ inline bool operator< (const CxtThreadProc& rhs) const
419
+ {
420
+ if (tid != rhs.getTid())
421
+ return tid < rhs.getTid();
422
+ else if(fun!=rhs.getProc())
423
+ return fun < rhs.getProc();
424
+ else
425
+ return cxt < rhs.getContext();
426
+ }
427
+ /// Overloading operator=
428
+ inline CxtThreadProc& operator= (const CxtThreadProc& rhs)
429
+ {
430
+ if(*this!=rhs)
431
+ {
432
+ tid = rhs.getTid();
433
+ fun = rhs.getProc();
434
+ cxt = rhs.getContext();
435
+ }
436
+ return *this;
437
+ }
438
+ /// Overloading operator==
439
+ inline bool operator== (const CxtThreadProc& rhs) const
440
+ {
441
+ return (tid == rhs.getTid() && fun == rhs.getProc() && cxt == rhs.getContext());
442
+ }
443
+ /// Overloading operator==
444
+ inline bool operator!= (const CxtThreadProc& rhs) const
445
+ {
446
+ return !(*this==rhs);
447
+ }
448
+ /// Dump CxtThreadProc
449
+ inline void dump() const
450
+ {
451
+ SVFUtil::outs() << "[ Current Thread id: " << tid << " Proc: " << fun->getName() << "\t Contexts: " << cxtToStr() << " ]\n";
452
+ }
453
+
454
+ private:
455
+ NodeID tid;
456
+ };
457
+
458
+ } // End namespace SVF
459
+ // Specialise has for class defined in this header file
460
+ template <> struct std::hash<SVF::CxtThread>
461
+ {
462
+ size_t operator()(const SVF::CxtThread& cs) const
463
+ {
464
+ std::hash<SVF::CallStrCxt> h;
465
+ return h(cs.getContext());
466
+ }
467
+ };
468
+ template <> struct std::hash<SVF::CxtThreadProc>
469
+ {
470
+ size_t operator()(const SVF::CxtThreadProc& ctp) const
471
+ {
472
+ std::hash<SVF::NodeID> h;
473
+ return h(ctp.getTid());
474
+ }
475
+ };
476
+ template <> struct std::hash<SVF::CxtThreadStmt>
477
+ {
478
+ size_t operator()(const SVF::CxtThreadStmt& cts) const
479
+ {
480
+ std::hash<SVF::NodeID> h;
481
+ return h(cts.getTid());
482
+ }
483
+ };
484
+ template <> struct std::hash<SVF::CxtStmt>
485
+ {
486
+ size_t operator()(const SVF::CxtStmt& cs) const
487
+ {
488
+ std::hash<SVF::ICFGNode*> h;
489
+ SVF::ICFGNode* inst = const_cast<SVF::ICFGNode*> (cs.getStmt());
490
+ return h(inst);
491
+ }
492
+ };
493
+ template <> struct std::hash<SVF::CxtProc>
494
+ {
495
+ size_t operator()(const SVF::CxtProc& cs) const
496
+ {
497
+ std::hash<SVF::FunObjVar*> h;
498
+ SVF::FunObjVar* fun = const_cast<SVF::FunObjVar*> (cs.getProc());
499
+ return h(fun);
500
+ }
501
+ };
502
+ #endif /* INCLUDE_UTIL_CXTSTMT_H_ */