svf-tools 1.0.619 → 1.0.621

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 (454) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
  2. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  3. package/SVF-doxygen/html/html/Andersen_8h_source.html +4 -3
  4. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +9 -4
  5. package/SVF-doxygen/html/html/CFLAlias_8h.html +4 -0
  6. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +19 -10
  7. package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +5 -5
  8. package/SVF-doxygen/html/html/CFLBase_8h_source.html +1 -1
  9. package/SVF-doxygen/html/html/CFLDataBuilder_8h.html +96 -0
  10. package/SVF-doxygen/html/html/CFLDataBuilder_8h_source.html +99 -0
  11. package/SVF-doxygen/html/html/CFLData_8h.html +106 -0
  12. package/SVF-doxygen/html/html/CFLData_8h_source.html +136 -0
  13. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +2 -2
  14. package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +7 -7
  15. package/SVF-doxygen/html/html/CFLSolver_8h.html +4 -0
  16. package/SVF-doxygen/html/html/CFLSolver_8h_source.html +22 -16
  17. package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +4 -4
  18. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +2 -2
  19. package/SVF-doxygen/html/html/CommandLine_8h.html +129 -0
  20. package/SVF-doxygen/html/html/CommandLine_8h_source.html +132 -0
  21. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  22. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +4 -4
  23. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
  25. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +20 -19
  26. package/SVF-doxygen/html/html/DDAPass_8h_source.html +9 -9
  27. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
  28. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +6 -6
  29. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
  31. package/SVF-doxygen/html/html/GraphWriter_8cpp_source.html +2 -1
  32. package/SVF-doxygen/html/html/GraphWriter_8h_source.html +2 -1
  33. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
  35. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
  36. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +2 -2
  37. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +21 -20
  38. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +17 -17
  39. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
  40. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
  41. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +2 -2
  42. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  43. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +3 -3
  44. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
  45. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
  46. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  47. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +2 -2
  48. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  49. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +6 -6
  50. package/SVF-doxygen/html/html/Options_8cpp.html +1 -0
  51. package/SVF-doxygen/html/html/Options_8cpp_source.html +124 -119
  52. package/SVF-doxygen/html/html/Options_8h.html +1 -1
  53. package/SVF-doxygen/html/html/Options_8h_source.html +125 -120
  54. package/SVF-doxygen/html/html/PCG_8cpp.html +2 -1
  55. package/SVF-doxygen/html/html/PCG_8cpp_source.html +13 -12
  56. package/SVF-doxygen/html/html/PCG_8h_source.html +12 -12
  57. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +4 -4
  58. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +13 -13
  59. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
  61. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +5 -5
  62. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
  63. package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +2 -2
  64. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +4 -3
  65. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +1 -1
  66. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +5 -4
  67. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +3 -3
  68. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +2 -2
  69. package/SVF-doxygen/html/html/SVFType_8h.html +2 -2
  70. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +2 -2
  71. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
  72. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +2 -2
  73. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +5 -5
  74. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +7 -7
  75. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +4 -4
  76. package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
  77. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  78. package/SVF-doxygen/html/html/VFG_8cpp_source.html +2 -2
  79. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +4 -4
  80. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +10 -9
  81. package/SVF-doxygen/html/html/WPAPass_8h_source.html +4 -4
  82. package/SVF-doxygen/html/html/Z3Expr_8cpp_source.html +2 -2
  83. package/SVF-doxygen/html/html/annotated.html +363 -353
  84. package/SVF-doxygen/html/html/cfl_8cpp.html +3 -85
  85. package/SVF-doxygen/html/html/cfl_8cpp_source.html +3 -5
  86. package/SVF-doxygen/html/html/classOption-members.html +99 -0
  87. package/SVF-doxygen/html/html/classOption.html +567 -0
  88. package/SVF-doxygen/html/html/classOption.png +0 -0
  89. package/SVF-doxygen/html/html/classOptionBase-members.html +95 -0
  90. package/SVF-doxygen/html/html/classOptionBase.html +823 -0
  91. package/SVF-doxygen/html/html/classOptionBase.png +0 -0
  92. package/SVF-doxygen/html/html/classOptionMap-members.html +97 -0
  93. package/SVF-doxygen/html/html/classOptionMap.html +428 -0
  94. package/SVF-doxygen/html/html/classOptionMap.png +0 -0
  95. package/SVF-doxygen/html/html/classOptionMultiple-members.html +97 -0
  96. package/SVF-doxygen/html/html/classOptionMultiple.html +460 -0
  97. package/SVF-doxygen/html/html/classOptionMultiple.png +0 -0
  98. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +2 -2
  99. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +16 -15
  100. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +9 -9
  101. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +6 -6
  102. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +7 -6
  103. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.png +0 -0
  104. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +2 -2
  105. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +2 -2
  106. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +33 -30
  107. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.png +0 -0
  108. package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +9 -8
  109. package/SVF-doxygen/html/html/classSVF_1_1CFLBase.png +0 -0
  110. package/SVF-doxygen/html/html/classSVF_1_1CFLData-members.html +110 -0
  111. package/SVF-doxygen/html/html/classSVF_1_1CFLData.html +1126 -0
  112. package/SVF-doxygen/html/html/classSVF_1_1CFLDataBuilder-members.html +88 -0
  113. package/SVF-doxygen/html/html/classSVF_1_1CFLDataBuilder.html +380 -0
  114. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +2 -2
  115. package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +4 -4
  116. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +48 -39
  117. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.png +0 -0
  118. package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +6 -6
  119. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +2 -2
  120. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +2 -2
  121. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +2 -2
  122. package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +2 -2
  123. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
  124. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +72 -72
  125. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +2 -2
  126. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +2 -2
  127. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +8 -8
  128. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +2 -2
  129. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +36 -35
  130. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  131. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +4 -4
  132. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +2 -2
  133. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +2 -2
  134. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +11 -11
  135. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +22 -8
  136. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  137. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +2 -2
  138. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +2 -2
  139. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +2 -2
  140. package/SVF-doxygen/html/html/classSVF_1_1GraphWriter.html +3 -2
  141. package/SVF-doxygen/html/html/classSVF_1_1HybridData-members.html +89 -0
  142. package/SVF-doxygen/html/html/classSVF_1_1HybridData.html +449 -0
  143. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
  144. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1IntervalExeState.html +8 -8
  146. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +2 -2
  147. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +73 -72
  148. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +2 -2
  149. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +2 -2
  150. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
  152. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +2 -2
  153. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +10 -10
  155. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +6 -6
  156. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +12 -12
  157. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
  158. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +4 -4
  159. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +2 -2
  160. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +8 -8
  161. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +2 -2
  162. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +2 -2
  163. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +121 -120
  164. package/SVF-doxygen/html/html/classSVF_1_1Options.html +641 -615
  165. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +28 -28
  166. package/SVF-doxygen/html/html/classSVF_1_1POCRAlias-members.html +281 -0
  167. package/SVF-doxygen/html/html/classSVF_1_1POCRAlias.html +828 -0
  168. package/SVF-doxygen/html/html/classSVF_1_1POCRAlias.png +0 -0
  169. package/SVF-doxygen/html/html/classSVF_1_1POCRSolver-members.html +98 -0
  170. package/SVF-doxygen/html/html/classSVF_1_1POCRSolver.html +245 -0
  171. package/SVF-doxygen/html/html/classSVF_1_1POCRSolver.png +0 -0
  172. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +2 -2
  173. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +20 -19
  174. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.png +0 -0
  175. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +2 -2
  176. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  177. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +2 -2
  178. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +3 -3
  179. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +7 -7
  180. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +9 -9
  181. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +9 -8
  182. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +2 -2
  183. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +18 -18
  184. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +6 -6
  185. package/SVF-doxygen/html/html/classSVF_1_1SVFType.html +1 -1
  186. package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +3 -3
  187. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +2 -2
  188. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +9 -9
  189. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +2 -2
  190. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +11 -11
  191. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +10 -10
  192. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +4 -4
  193. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +2 -2
  194. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +2 -2
  195. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  196. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +2 -2
  197. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +8 -8
  198. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +2 -2
  199. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +6 -6
  200. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +27 -26
  201. package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +6 -6
  202. package/SVF-doxygen/html/html/classes.html +110 -108
  203. package/SVF-doxygen/html/html/dda_8cpp.html +51 -248
  204. package/SVF-doxygen/html/html/dda_8cpp_source.html +9 -10
  205. package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +2 -0
  206. package/SVF-doxygen/html/html/dir_ae8aa099e368efaa962140c6624142bc.html +4 -0
  207. package/SVF-doxygen/html/html/files.html +27 -24
  208. package/SVF-doxygen/html/html/functions.html +7 -1
  209. package/SVF-doxygen/html/html/functions_0x7e.html +18 -0
  210. package/SVF-doxygen/html/html/functions_a.html +45 -21
  211. package/SVF-doxygen/html/html/functions_b.html +15 -7
  212. package/SVF-doxygen/html/html/functions_c.html +72 -49
  213. package/SVF-doxygen/html/html/functions_d.html +25 -16
  214. package/SVF-doxygen/html/html/functions_e.html +11 -4
  215. package/SVF-doxygen/html/html/functions_f.html +19 -16
  216. package/SVF-doxygen/html/html/functions_func.html +35 -11
  217. package/SVF-doxygen/html/html/functions_func_0x7e.html +18 -0
  218. package/SVF-doxygen/html/html/functions_func_b.html +11 -3
  219. package/SVF-doxygen/html/html/functions_func_c.html +55 -34
  220. package/SVF-doxygen/html/html/functions_func_e.html +5 -1
  221. package/SVF-doxygen/html/html/functions_func_f.html +4 -1
  222. package/SVF-doxygen/html/html/functions_func_g.html +26 -7
  223. package/SVF-doxygen/html/html/functions_func_h.html +10 -3
  224. package/SVF-doxygen/html/html/functions_func_i.html +25 -10
  225. package/SVF-doxygen/html/html/functions_func_m.html +3 -2
  226. package/SVF-doxygen/html/html/functions_func_n.html +4 -1
  227. package/SVF-doxygen/html/html/functions_func_o.html +23 -6
  228. package/SVF-doxygen/html/html/functions_func_p.html +15 -3
  229. package/SVF-doxygen/html/html/functions_func_s.html +20 -19
  230. package/SVF-doxygen/html/html/functions_func_t.html +3 -0
  231. package/SVF-doxygen/html/html/functions_func_u.html +3 -0
  232. package/SVF-doxygen/html/html/functions_g.html +28 -9
  233. package/SVF-doxygen/html/html/functions_h.html +13 -6
  234. package/SVF-doxygen/html/html/functions_i.html +44 -20
  235. package/SVF-doxygen/html/html/functions_k.html +1 -1
  236. package/SVF-doxygen/html/html/functions_l.html +4 -4
  237. package/SVF-doxygen/html/html/functions_m.html +14 -13
  238. package/SVF-doxygen/html/html/functions_n.html +9 -5
  239. package/SVF-doxygen/html/html/functions_o.html +48 -25
  240. package/SVF-doxygen/html/html/functions_p.html +65 -34
  241. package/SVF-doxygen/html/html/functions_r.html +7 -9
  242. package/SVF-doxygen/html/html/functions_s.html +34 -32
  243. package/SVF-doxygen/html/html/functions_t.html +17 -8
  244. package/SVF-doxygen/html/html/functions_type_c.html +2 -1
  245. package/SVF-doxygen/html/html/functions_type_d.html +3 -0
  246. package/SVF-doxygen/html/html/functions_type_i.html +2 -1
  247. package/SVF-doxygen/html/html/functions_type_o.html +7 -0
  248. package/SVF-doxygen/html/html/functions_type_p.html +6 -0
  249. package/SVF-doxygen/html/html/functions_type_t.html +3 -0
  250. package/SVF-doxygen/html/html/functions_u.html +6 -3
  251. package/SVF-doxygen/html/html/functions_v.html +7 -5
  252. package/SVF-doxygen/html/html/functions_vars.html +7 -1
  253. package/SVF-doxygen/html/html/functions_vars_a.html +7 -7
  254. package/SVF-doxygen/html/html/functions_vars_b.html +1 -1
  255. package/SVF-doxygen/html/html/functions_vars_c.html +15 -12
  256. package/SVF-doxygen/html/html/functions_vars_d.html +21 -15
  257. package/SVF-doxygen/html/html/functions_vars_e.html +5 -2
  258. package/SVF-doxygen/html/html/functions_vars_f.html +6 -6
  259. package/SVF-doxygen/html/html/functions_vars_g.html +2 -2
  260. package/SVF-doxygen/html/html/functions_vars_h.html +1 -1
  261. package/SVF-doxygen/html/html/functions_vars_i.html +14 -6
  262. package/SVF-doxygen/html/html/functions_vars_k.html +1 -1
  263. package/SVF-doxygen/html/html/functions_vars_l.html +4 -4
  264. package/SVF-doxygen/html/html/functions_vars_m.html +11 -11
  265. package/SVF-doxygen/html/html/functions_vars_n.html +3 -2
  266. package/SVF-doxygen/html/html/functions_vars_o.html +5 -2
  267. package/SVF-doxygen/html/html/functions_vars_p.html +34 -21
  268. package/SVF-doxygen/html/html/functions_vars_r.html +5 -5
  269. package/SVF-doxygen/html/html/functions_vars_s.html +13 -10
  270. package/SVF-doxygen/html/html/functions_vars_t.html +7 -4
  271. package/SVF-doxygen/html/html/functions_vars_u.html +3 -3
  272. package/SVF-doxygen/html/html/functions_vars_v.html +6 -4
  273. package/SVF-doxygen/html/html/functions_vars_w.html +3 -3
  274. package/SVF-doxygen/html/html/functions_w.html +11 -7
  275. package/SVF-doxygen/html/html/globals_d.html +4 -4
  276. package/SVF-doxygen/html/html/globals_e.html +6 -6
  277. package/SVF-doxygen/html/html/globals_f.html +2 -2
  278. package/SVF-doxygen/html/html/globals_func.html +6 -58
  279. package/SVF-doxygen/html/html/globals_i.html +4 -12
  280. package/SVF-doxygen/html/html/globals_l.html +2 -2
  281. package/SVF-doxygen/html/html/globals_r.html +4 -4
  282. package/SVF-doxygen/html/html/globals_s.html +0 -4
  283. package/SVF-doxygen/html/html/globals_type.html +3 -0
  284. package/SVF-doxygen/html/html/globals_u.html +3 -0
  285. package/SVF-doxygen/html/html/globals_vars.html +43 -12
  286. package/SVF-doxygen/html/html/hierarchy.html +517 -496
  287. package/SVF-doxygen/html/html/include_2MTA_2MTAResultValidator_8h_source.html +1 -1
  288. package/SVF-doxygen/html/html/menudata.js +1 -2
  289. package/SVF-doxygen/html/html/mta_8cpp.html +4 -47
  290. package/SVF-doxygen/html/html/mta_8cpp_source.html +4 -4
  291. package/SVF-doxygen/html/html/namespaceSVF.html +29 -0
  292. package/SVF-doxygen/html/html/namespaceSVF_1_1DOT.html +3 -2
  293. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  294. package/SVF-doxygen/html/html/namespacemembers_l.html +3 -0
  295. package/SVF-doxygen/html/html/namespacemembers_type_l.html +3 -0
  296. package/SVF-doxygen/html/html/saber_8cpp.html +38 -136
  297. package/SVF-doxygen/html/html/saber_8cpp_source.html +8 -7
  298. package/SVF-doxygen/html/html/search/all_0.js +2 -1
  299. package/SVF-doxygen/html/html/search/all_1.js +15 -8
  300. package/SVF-doxygen/html/html/search/all_10.js +33 -25
  301. package/SVF-doxygen/html/html/search/all_11.js +9 -9
  302. package/SVF-doxygen/html/html/search/all_12.js +22 -22
  303. package/SVF-doxygen/html/html/search/all_13.js +14 -11
  304. package/SVF-doxygen/html/html/search/all_14.js +5 -4
  305. package/SVF-doxygen/html/html/search/all_15.js +5 -5
  306. package/SVF-doxygen/html/html/search/all_16.js +4 -4
  307. package/SVF-doxygen/html/html/search/all_19.js +6 -0
  308. package/SVF-doxygen/html/html/search/all_2.js +5 -3
  309. package/SVF-doxygen/html/html/search/all_3.js +25 -18
  310. package/SVF-doxygen/html/html/search/all_4.js +20 -18
  311. package/SVF-doxygen/html/html/search/all_5.js +8 -6
  312. package/SVF-doxygen/html/html/search/all_6.js +9 -8
  313. package/SVF-doxygen/html/html/search/all_7.js +9 -3
  314. package/SVF-doxygen/html/html/search/all_8.js +5 -3
  315. package/SVF-doxygen/html/html/search/all_9.js +16 -11
  316. package/SVF-doxygen/html/html/search/all_b.js +2 -2
  317. package/SVF-doxygen/html/html/search/all_c.js +7 -6
  318. package/SVF-doxygen/html/html/search/all_d.js +13 -13
  319. package/SVF-doxygen/html/html/search/all_e.js +4 -3
  320. package/SVF-doxygen/html/html/search/all_f.js +24 -6
  321. package/SVF-doxygen/html/html/search/classes_10.js +1 -0
  322. package/SVF-doxygen/html/html/search/classes_2.js +2 -0
  323. package/SVF-doxygen/html/html/search/classes_7.js +2 -1
  324. package/SVF-doxygen/html/html/search/classes_c.js +15 -0
  325. package/SVF-doxygen/html/html/search/classes_d.js +2 -0
  326. package/SVF-doxygen/html/html/search/files_2.js +3 -0
  327. package/SVF-doxygen/html/html/search/functions_0.js +8 -1
  328. package/SVF-doxygen/html/html/search/functions_1.js +4 -2
  329. package/SVF-doxygen/html/html/search/functions_10.js +0 -2
  330. package/SVF-doxygen/html/html/search/functions_11.js +2 -3
  331. package/SVF-doxygen/html/html/search/functions_12.js +1 -0
  332. package/SVF-doxygen/html/html/search/functions_13.js +1 -0
  333. package/SVF-doxygen/html/html/search/functions_17.js +6 -0
  334. package/SVF-doxygen/html/html/search/functions_2.js +5 -1
  335. package/SVF-doxygen/html/html/search/functions_3.js +0 -2
  336. package/SVF-doxygen/html/html/search/functions_4.js +2 -4
  337. package/SVF-doxygen/html/html/search/functions_5.js +2 -1
  338. package/SVF-doxygen/html/html/search/functions_6.js +7 -1
  339. package/SVF-doxygen/html/html/search/functions_7.js +4 -2
  340. package/SVF-doxygen/html/html/search/functions_8.js +6 -3
  341. package/SVF-doxygen/html/html/search/functions_b.js +1 -1
  342. package/SVF-doxygen/html/html/search/functions_c.js +1 -1
  343. package/SVF-doxygen/html/html/search/functions_d.js +1 -0
  344. package/SVF-doxygen/html/html/search/functions_e.js +7 -3
  345. package/SVF-doxygen/html/html/search/functions_f.js +3 -0
  346. package/SVF-doxygen/html/html/search/typedefs_11.js +2 -1
  347. package/SVF-doxygen/html/html/search/typedefs_12.js +1 -1
  348. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
  349. package/SVF-doxygen/html/html/search/typedefs_3.js +1 -0
  350. package/SVF-doxygen/html/html/search/typedefs_7.js +1 -1
  351. package/SVF-doxygen/html/html/search/typedefs_a.js +1 -0
  352. package/SVF-doxygen/html/html/search/typedefs_d.js +2 -0
  353. package/SVF-doxygen/html/html/search/typedefs_e.js +2 -0
  354. package/SVF-doxygen/html/html/search/variables_0.js +2 -1
  355. package/SVF-doxygen/html/html/search/variables_1.js +7 -7
  356. package/SVF-doxygen/html/html/search/variables_10.js +25 -21
  357. package/SVF-doxygen/html/html/search/variables_11.js +7 -5
  358. package/SVF-doxygen/html/html/search/variables_12.js +11 -10
  359. package/SVF-doxygen/html/html/search/variables_13.js +9 -8
  360. package/SVF-doxygen/html/html/search/variables_14.js +3 -3
  361. package/SVF-doxygen/html/html/search/variables_15.js +4 -4
  362. package/SVF-doxygen/html/html/search/variables_16.js +3 -3
  363. package/SVF-doxygen/html/html/search/variables_2.js +1 -1
  364. package/SVF-doxygen/html/html/search/variables_3.js +13 -12
  365. package/SVF-doxygen/html/html/search/variables_4.js +19 -15
  366. package/SVF-doxygen/html/html/search/variables_5.js +6 -2
  367. package/SVF-doxygen/html/html/search/variables_6.js +7 -6
  368. package/SVF-doxygen/html/html/search/variables_7.js +2 -2
  369. package/SVF-doxygen/html/html/search/variables_8.js +1 -1
  370. package/SVF-doxygen/html/html/search/variables_9.js +9 -7
  371. package/SVF-doxygen/html/html/search/variables_b.js +1 -1
  372. package/SVF-doxygen/html/html/search/variables_c.js +5 -4
  373. package/SVF-doxygen/html/html/search/variables_d.js +11 -11
  374. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  375. package/SVF-doxygen/html/html/search/variables_f.js +3 -2
  376. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +4 -4
  377. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
  378. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
  379. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +4 -4
  380. package/SVF-doxygen/html/html/structSVF_1_1HybridData_1_1TreeNode-members.html +86 -0
  381. package/SVF-doxygen/html/html/structSVF_1_1HybridData_1_1TreeNode.html +255 -0
  382. package/SVF-doxygen/html/html/svf-ex_8cpp.html +12 -55
  383. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +8 -8
  384. package/SVF-doxygen/html/html/tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
  385. package/SVF-doxygen/html/html/wpa_8cpp.html +4 -47
  386. package/SVF-doxygen/html/html/wpa_8cpp_source.html +4 -4
  387. package/include/CFL/CFLAlias.h +34 -0
  388. package/include/CFL/CFLData.h +316 -0
  389. package/include/CFL/CFLDataBuilder.h +91 -0
  390. package/include/CFL/CFLSolver.h +21 -0
  391. package/include/Util/CommandLine.h +527 -0
  392. package/include/Util/Options.h +125 -124
  393. package/include/WPA/Andersen.h +5 -5
  394. package/lib/AbstractExecution/SVFIR2ItvExeState.cpp +2 -2
  395. package/lib/CFL/CFLAlias.cpp +40 -4
  396. package/lib/CFL/CFLBase.cpp +4 -4
  397. package/lib/CFL/CFLGraphBuilder.cpp +2 -2
  398. package/lib/CFL/CFLVF.cpp +5 -5
  399. package/lib/DDA/ContextDDA.cpp +1 -1
  400. package/lib/DDA/DDAPass.cpp +14 -13
  401. package/lib/DDA/FlowDDA.cpp +1 -1
  402. package/lib/Graphs/ConsG.cpp +10 -10
  403. package/lib/Graphs/ICFG.cpp +1 -1
  404. package/lib/Graphs/IRGraph.cpp +2 -2
  405. package/lib/Graphs/SVFG.cpp +5 -5
  406. package/lib/Graphs/SVFGOPT.cpp +5 -5
  407. package/lib/Graphs/VFG.cpp +1 -1
  408. package/lib/MSSA/MemRegion.cpp +2 -2
  409. package/lib/MSSA/MemSSA.cpp +4 -4
  410. package/lib/MSSA/SVFGBuilder.cpp +4 -4
  411. package/lib/MTA/FSMPTA.cpp +13 -13
  412. package/lib/MTA/MHP.cpp +1 -1
  413. package/lib/MTA/MTA.cpp +2 -2
  414. package/lib/MTA/MTAStat.cpp +1 -1
  415. package/lib/MTA/PCG.cpp +8 -2
  416. package/lib/MTA/TCT.cpp +2 -2
  417. package/lib/MemoryModel/PointerAnalysis.cpp +13 -13
  418. package/lib/MemoryModel/PointerAnalysisImpl.cpp +13 -13
  419. package/lib/MemoryModel/PointsTo.cpp +1 -1
  420. package/lib/SABER/DoubleFreeChecker.cpp +1 -1
  421. package/lib/SABER/LeakChecker.cpp +1 -1
  422. package/lib/SABER/SaberCondAllocator.cpp +1 -1
  423. package/lib/SABER/SrcSnkDDA.cpp +5 -5
  424. package/lib/SVF-LLVM/CHGBuilder.cpp +1 -1
  425. package/lib/SVF-LLVM/DCHG.cpp +1 -1
  426. package/lib/SVF-LLVM/LLVMLoopAnalysis.cpp +2 -2
  427. package/lib/SVF-LLVM/LLVMModule.cpp +10 -4
  428. package/lib/SVF-LLVM/SVFIRBuilder.cpp +8 -8
  429. package/lib/SVF-LLVM/SymbolTableBuilder.cpp +5 -5
  430. package/lib/SVFIR/SVFIR.cpp +4 -4
  431. package/lib/SVFIR/SVFStatements.cpp +16 -16
  432. package/lib/SVFIR/SVFVariables.cpp +5 -5
  433. package/lib/SVFIR/SymbolTableInfo.cpp +6 -6
  434. package/lib/Util/NodeIDAllocator.cpp +9 -9
  435. package/lib/Util/Options.cpp +431 -412
  436. package/lib/Util/SVFStat.cpp +5 -5
  437. package/lib/Util/SVFUtil.cpp +1 -1
  438. package/lib/Util/Z3Expr.cpp +2 -2
  439. package/lib/WPA/Andersen.cpp +13 -13
  440. package/lib/WPA/AndersenSCD.cpp +3 -3
  441. package/lib/WPA/FlowSensitive.cpp +8 -8
  442. package/lib/WPA/TypeAnalysis.cpp +1 -1
  443. package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
  444. package/lib/WPA/WPAPass.cpp +10 -9
  445. package/package.json +1 -1
  446. package/tools/CFL/cfl.cpp +8 -14
  447. package/tools/DDA/dda.cpp +39 -29
  448. package/tools/Example/svf-ex.cpp +5 -8
  449. package/tools/MTA/LockResultValidator.cpp +2 -2
  450. package/tools/MTA/MTAAnnotator.cpp +5 -5
  451. package/tools/MTA/MTAResultValidator.cpp +8 -8
  452. package/tools/MTA/mta.cpp +5 -8
  453. package/tools/SABER/saber.cpp +23 -17
  454. package/tools/WPA/wpa.cpp +6 -9
@@ -1,825 +1,844 @@
1
1
  //===- Options.cpp -- Command line options ------------------------//
2
2
 
3
3
  #include "Util/Options.h"
4
+ #include "Util/CommandLine.h"
4
5
 
5
6
  namespace SVF
6
7
  {
7
- const llvm::cl::opt<enum PTAStat::ClockType> Options::ClockType(
8
+ const OptionMap<enum PTAStat::ClockType> Options::ClockType(
8
9
  "clock-type",
9
- llvm::cl::init(PTAStat::ClockType::CPU),
10
- llvm::cl::desc("how time should be measured"),
11
- llvm::cl::values(
12
- clEnumValN(PTAStat::ClockType::Wall, "wall", "use wall time"),
13
- clEnumValN(PTAStat::ClockType::CPU, "cpu", "use CPU time")
14
- )
10
+ "how time should be measured",
11
+ PTAStat::ClockType::CPU,
12
+ {
13
+ {PTAStat::ClockType::Wall, "wall", "use wall time"},
14
+ {PTAStat::ClockType::CPU, "cpu", "use CPU time"},
15
+ }
15
16
  );
16
17
 
17
- const llvm::cl::opt<bool> Options::MarkedClocksOnly(
18
+ const Option<bool> Options::MarkedClocksOnly(
18
19
  "marked-clocks-only",
19
- llvm::cl::init(true),
20
- llvm::cl::desc("Only measure times where explicitly marked"));
20
+ "Only measure times where explicitly marked",
21
+ true
22
+ );
21
23
 
22
- const llvm::cl::opt<NodeIDAllocator::Strategy> Options::NodeAllocStrat(
24
+ const OptionMap<NodeIDAllocator::Strategy> Options::NodeAllocStrat(
23
25
  "node-alloc-strat",
24
- llvm::cl::init(NodeIDAllocator::Strategy::SEQ),
25
- llvm::cl::desc("Method of allocating (LLVM) values and memory objects as node IDs"),
26
- llvm::cl::values(
27
- clEnumValN(NodeIDAllocator::Strategy::DENSE, "dense", "allocate objects together [0-n] and values together [m-MAX], separately"),
28
- clEnumValN(NodeIDAllocator::Strategy::REVERSE_DENSE, "reverse-dense", "like dense but flipped, objects are [m-MAX], values are [0-n]"),
29
- clEnumValN(NodeIDAllocator::Strategy::SEQ, "seq", "allocate values and objects sequentially, intermixed (default)"),
30
- clEnumValN(NodeIDAllocator::Strategy::DEBUG, "debug", "allocate value and objects sequentially, intermixed, except GEP objects as offsets")));
31
-
32
- const llvm::cl::opt<unsigned> Options::MaxFieldLimit(
26
+ "Method of allocating (LLVM) values and memory objects as node IDs",
27
+ NodeIDAllocator::Strategy::SEQ,
28
+ {
29
+ {NodeIDAllocator::Strategy::DENSE, "dense", "allocate objects together [0-n] and values together [m-MAX], separately"},
30
+ {NodeIDAllocator::Strategy::REVERSE_DENSE, "reverse-dense", "like dense but flipped, objects are [m-MAX], values are [0-n]"},
31
+ {NodeIDAllocator::Strategy::SEQ, "seq", "allocate values and objects sequentially, intermixed (default)"},
32
+ {NodeIDAllocator::Strategy::DEBUG, "debug", "allocate value and objects sequentially, intermixed, except GEP objects as offsets"},
33
+ }
34
+ );
35
+
36
+ const Option<u32_t> Options::MaxFieldLimit(
33
37
  "field-limit",
34
- llvm::cl::init(512),
35
- llvm::cl::desc("Maximum number of fields for field sensitive analysis"));
38
+ "Maximum number of fields for field sensitive analysis",
39
+ 512
40
+ );
36
41
 
37
- const llvm::cl::opt<BVDataPTAImpl::PTBackingType> Options::ptDataBacking(
42
+ const OptionMap<BVDataPTAImpl::PTBackingType> Options::ptDataBacking(
38
43
  "ptd",
39
- llvm::cl::init(BVDataPTAImpl::PTBackingType::Persistent),
40
- llvm::cl::desc("Overarching points-to data structure"),
41
- llvm::cl::values(
42
- clEnumValN(BVDataPTAImpl::PTBackingType::Mutable, "mutable", "points-to set per pointer"),
43
- clEnumValN(BVDataPTAImpl::PTBackingType::Persistent, "persistent", "points-to set ID per pointer, operations hash-consed")));
44
+ "Overarching points-to data structure",
45
+ BVDataPTAImpl::PTBackingType::Persistent,
46
+ {
47
+ {BVDataPTAImpl::PTBackingType::Mutable, "mutable", "points-to set per pointer"},
48
+ {BVDataPTAImpl::PTBackingType::Persistent, "persistent", "points-to set ID per pointer, operations hash-consed"},
49
+ }
50
+ );
44
51
 
45
- const llvm::cl::opt<unsigned> Options::FsTimeLimit(
52
+ const Option<u32_t> Options::FsTimeLimit(
46
53
  "fs-time-limit",
47
- llvm::cl::init(0),
48
- llvm::cl::desc("time limit for main phase of flow-sensitive analyses")
54
+ "time limit for main phase of flow-sensitive analyses",
55
+ 0
49
56
  );
50
57
 
51
- const llvm::cl::opt<unsigned> Options::VersioningThreads(
58
+ const Option<u32_t> Options::VersioningThreads(
52
59
  "versioning-threads",
53
- llvm::cl::init(1),
54
- llvm::cl::desc("number of threads to use in the versioning phase of versioned flow-sensitive analysis")
60
+ "number of threads to use in the versioning phase of versioned flow-sensitive analysis",
61
+ 1
55
62
  );
56
63
 
57
- const llvm::cl::opt<unsigned> Options::AnderTimeLimit(
64
+ const Option<u32_t> Options::AnderTimeLimit(
58
65
  "ander-time-limit",
59
- llvm::cl::init(0),
60
- llvm::cl::desc("time limit for Andersen's analyses (ignored when -fs-time-limit set)")
66
+ "time limit for Andersen's analyses (ignored when -fs-time-limit set)",
67
+ 0
61
68
  );
62
69
 
63
70
  // ContextDDA.cpp
64
- const llvm::cl::opt<unsigned long long> Options::CxtBudget(
71
+ const Option<u32_t> Options::CxtBudget(
65
72
  "cxt-bg",
66
- llvm::cl::init(10000),
67
- llvm::cl::desc("Maximum step budget of context-sensitive traversing")
73
+ "Maximum step budget of context-sensitive traversing",
74
+ 10000
68
75
  );
69
76
 
70
77
 
71
78
  // DDAClient.cpp
72
- const llvm::cl::opt<bool> Options::SingleLoad(
79
+ const Option<bool> Options::SingleLoad(
73
80
  "single-load",
74
- llvm::cl::init(true),
75
- llvm::cl::desc("Count load pointer with same source operand as one query")
81
+ "Count load pointer with same source operand as one query",
82
+ true
76
83
  );
77
84
 
78
- const llvm::cl::opt<bool> Options::DumpFree(
85
+ const Option<bool> Options::DumpFree(
79
86
  "dump-free",
80
- llvm::cl::init(false),
81
- llvm::cl::desc("Dump use after free locations")
87
+ "Dump use after free locations",
88
+ false
82
89
  );
83
90
 
84
- const llvm::cl::opt<bool> Options::DumpUninitVar(
91
+ const Option<bool> Options::DumpUninitVar(
85
92
  "dump-uninit-var",
86
- llvm::cl::init(false),
87
- llvm::cl::desc("Dump uninitialised variables")
93
+ "Dump uninitialised variables",
94
+ false
88
95
  );
89
96
 
90
- const llvm::cl::opt<bool> Options::DumpUninitPtr(
97
+ const Option<bool> Options::DumpUninitPtr(
91
98
  "dump-uninit-ptr",
92
- llvm::cl::init(false),
93
- llvm::cl::desc("Dump uninitialised pointers")
99
+ "Dump uninitialised pointers",
100
+ false
94
101
  );
95
102
 
96
- const llvm::cl::opt<bool> Options::DumpSUPts(
103
+ const Option<bool> Options::DumpSUPts(
97
104
  "dump-su-pts",
98
- llvm::cl::init(false),
99
- llvm::cl::desc("Dump strong updates store")
105
+ "Dump strong updates store",
106
+ false
100
107
  );
101
108
 
102
- const llvm::cl::opt<bool> Options::DumpSUStore(
109
+ const Option<bool> Options::DumpSUStore(
103
110
  "dump-su-store",
104
- llvm::cl::init(false),
105
- llvm::cl::desc("Dump strong updates store")
111
+ "Dump strong updates store",
112
+ false
106
113
  );
107
114
 
108
- const llvm::cl::opt<bool> Options::MallocOnly(
115
+ const Option<bool> Options::MallocOnly(
109
116
  "malloc-only",
110
- llvm::cl::init(true),
111
- llvm::cl::desc("Only add tainted objects for malloc")
117
+ "Only add tainted objects for malloc",
118
+ true
112
119
  );
113
120
 
114
- const llvm::cl::opt<bool> Options::TaintUninitHeap(
121
+ const Option<bool> Options::TaintUninitHeap(
115
122
  "uninit-heap",
116
- llvm::cl::init(true),
117
- llvm::cl::desc("detect uninitialized heap variables")
123
+ "detect uninitialized heap variables",
124
+ true
118
125
  );
119
126
 
120
- const llvm::cl::opt<bool> Options::TaintUninitStack(
127
+ const Option<bool> Options::TaintUninitStack(
121
128
  "uninit-stack",
122
- llvm::cl::init(true),
123
- llvm::cl::desc("detect uninitialized stack variables")
129
+ "detect uninitialized stack variables",
130
+ true
124
131
  );
125
132
 
126
133
  // DDAPass.cpp
127
- const llvm::cl::opt<unsigned> Options::MaxPathLen(
134
+ const Option<u32_t> Options::MaxPathLen(
128
135
  "max-path",
129
- llvm::cl::init(100000),
130
- llvm::cl::desc("Maximum path limit for DDA")
136
+ "Maximum path limit for DDA",
137
+ 100000
131
138
  );
132
139
 
133
- const llvm::cl::opt<unsigned> Options::MaxContextLen(
140
+ const Option<u32_t> Options::MaxContextLen(
134
141
  "max-cxt",
135
- llvm::cl::init(3),
136
- llvm::cl::desc("Maximum context limit for DDA")
142
+ "Maximum context limit for DDA",
143
+ 3
137
144
  );
138
145
 
139
- const llvm::cl::opt<unsigned> Options::MaxStepInWrapper(
146
+ const Option<u32_t> Options::MaxStepInWrapper(
140
147
  "max-step",
141
- llvm::cl::init(10),
142
- llvm::cl::desc("Maximum steps when traversing on SVFG to identify a memory allocation wrapper")
148
+ "Maximum steps when traversing on SVFG to identify a memory allocation wrapper",
149
+ 10
143
150
  );
144
151
 
145
- const llvm::cl::opt<std::string> Options::UserInputQuery(
152
+ const Option<std::string> Options::UserInputQuery(
146
153
  "query",
147
- llvm::cl::init("all"),
148
- llvm::cl::desc("Please specify queries by inputing their pointer ids")
154
+ "Please specify queries by inputing their pointer ids",
155
+ "all"
149
156
  );
150
157
 
151
- const llvm::cl::opt<bool> Options::InsenRecur(
158
+ const Option<bool> Options::InsenRecur(
152
159
  "in-recur",
153
- llvm::cl::init(false),
154
- llvm::cl::desc("Mark context insensitive SVFG edges due to function recursions")
160
+ "Mark context insensitive SVFG edges due to function recursions",
161
+ false
155
162
  );
156
163
 
157
- const llvm::cl::opt<bool> Options::InsenCycle(
164
+ const Option<bool> Options::InsenCycle(
158
165
  "in-cycle",
159
- llvm::cl::init(false),
160
- llvm::cl::desc("Mark context insensitive SVFG edges due to value-flow cycles")
166
+ "Mark context insensitive SVFG edges due to value-flow cycles",
167
+ false
161
168
  );
162
169
 
163
- const llvm::cl::opt<bool> Options::PrintCPts(
170
+ const Option<bool> Options::PrintCPts(
164
171
  "cpts",
165
- llvm::cl::init(false),
166
- llvm::cl::desc("Dump conditional points-to set ")
172
+ "Dump conditional points-to set ",
173
+ false
167
174
  );
168
175
 
169
- const llvm::cl::opt<bool> Options::PrintQueryPts(
176
+ const Option<bool> Options::PrintQueryPts(
170
177
  "print-query-pts",
171
- llvm::cl::init(false),
172
- llvm::cl::desc("Dump queries' conditional points-to set ")
178
+ "Dump queries' conditional points-to set ",
179
+ false
173
180
  );
174
181
 
175
- const llvm::cl::opt<bool> Options::WPANum(
182
+ const Option<bool> Options::WPANum(
176
183
  "wpa-num",
177
- llvm::cl::init(false),
178
- llvm::cl::desc("collect WPA FS number only ")
184
+ "collect WPA FS number only ",
185
+ false
179
186
  );
180
187
 
181
188
  /// register this into alias analysis group
182
189
  //static RegisterAnalysisGroup<AliasAnalysis> AA_GROUP(DDAPA);
183
- llvm::cl::bits<PointerAnalysis::PTATY> Options::DDASelected(
184
- llvm::cl::desc("Select pointer analysis"),
185
- llvm::cl::values(
186
- clEnumValN(PointerAnalysis::FlowS_DDA, "dfs", "Demand-driven flow sensitive analysis"),
187
- clEnumValN(PointerAnalysis::Cxt_DDA, "cxt", "Demand-driven context- flow- sensitive analysis")
188
- ));
190
+ OptionMultiple<PointerAnalysis::PTATY> Options::DDASelected(
191
+ "Select pointer analysis",
192
+ {
193
+ {PointerAnalysis::FlowS_DDA, "dfs", "Demand-driven flow sensitive analysis"},
194
+ {PointerAnalysis::Cxt_DDA, "cxt", "Demand-driven context- flow- sensitive analysis"},
195
+ }
196
+ );
189
197
 
190
198
  // FlowDDA.cpp
191
- const llvm::cl::opt<unsigned long long> Options::FlowBudget(
199
+ const Option<u32_t> Options::FlowBudget(
192
200
  "flow-bg",
193
- llvm::cl::init(10000),
194
- llvm::cl::desc("Maximum step budget of flow-sensitive traversing")
201
+ "Maximum step budget of flow-sensitive traversing",
202
+ 10000
195
203
  );
196
204
 
197
205
 
198
206
  // Offline constraint graph (OfflineConsG.cpp)
199
- const llvm::cl::opt<bool> Options::OCGDotGraph(
207
+ const Option<bool> Options::OCGDotGraph(
200
208
  "dump-ocg",
201
- llvm::cl::init(false),
202
- llvm::cl::desc("Dump dot graph of Offline Constraint Graph")
209
+ "Dump dot graph of Offline Constraint Graph",
210
+ false
203
211
  );
204
212
 
205
213
 
206
214
  // Program Assignment Graph for pointer analysis (SVFIR.cpp)
207
- llvm::cl::opt<bool> Options::HandBlackHole(
215
+ Option<bool> Options::HandBlackHole(
208
216
  "blk",
209
- llvm::cl::init(false),
210
- llvm::cl::desc("Hanle blackhole edge")
217
+ "Hanle blackhole edge",
218
+ false
211
219
  );
212
220
 
213
- const llvm::cl::opt<bool> Options::FirstFieldEqBase(
221
+ const Option<bool> Options::FirstFieldEqBase(
214
222
  "ff-eq-base",
215
- llvm::cl::init(false),
216
- llvm::cl::desc("Treat base objects as their first fields")
223
+ "Treat base objects as their first fields",
224
+ false
217
225
  );
218
226
 
219
227
 
220
228
  // SVFG optimizer (SVFGOPT.cpp)
221
- const llvm::cl::opt<bool> Options::ContextInsensitive(
229
+ const Option<bool> Options::ContextInsensitive(
222
230
  "ci-svfg",
223
- llvm::cl::init(false),
224
- llvm::cl::desc("Reduce SVFG into a context-insensitive one")
231
+ "Reduce SVFG into a context-insensitive one",
232
+ false
225
233
  );
226
234
 
227
- const llvm::cl::opt<bool> Options::KeepAOFI(
235
+ const Option<bool> Options::KeepAOFI(
228
236
  "keep-aofi",
229
- llvm::cl::init(false),
230
- llvm::cl::desc("Keep formal-in and actual-out parameters")
237
+ "Keep formal-in and actual-out parameters",
238
+ false
231
239
  );
232
240
 
233
- const llvm::cl::opt<std::string> Options::SelfCycle(
241
+ const Option<std::string> Options::SelfCycle(
234
242
  "keep-self-cycle",
235
- llvm::cl::value_desc("keep self cycle"),
236
- llvm::cl::desc("How to handle self cycle edges: all, context, none")
243
+ "How to handle self cycle edges: all, context, none",
244
+ ""
237
245
  );
238
246
 
239
247
 
240
248
  // Sparse value-flow graph (VFG.cpp)
241
- const llvm::cl::opt<bool> Options::DumpVFG(
249
+ const Option<bool> Options::DumpVFG(
242
250
  "dump-vfg",
243
- llvm::cl::init(false),
244
- llvm::cl::desc("Dump dot graph of VFG")
251
+ "Dump dot graph of VFG",
252
+ false
245
253
  );
246
254
 
247
255
 
248
256
  // Location set for modeling abstract memory object (LocationSet.cpp)
249
- const llvm::cl::opt<bool> Options::SingleStride(
257
+ const Option<bool> Options::SingleStride(
250
258
  "stride-only",
251
- llvm::cl::init(false),
252
- llvm::cl::desc("Only use single stride in LocMemoryModel")
259
+ "Only use single stride in LocMemoryModel",
260
+ false
253
261
  );
254
262
 
255
263
 
256
264
  // Base class of pointer analyses (PointerAnalysis.cpp)
257
- const llvm::cl::opt<bool> Options::TypePrint(
265
+ const Option<bool> Options::TypePrint(
258
266
  "print-type",
259
- llvm::cl::init(false),
260
- llvm::cl::desc("Print type")
267
+ "Print type",
268
+ false
261
269
  );
262
270
 
263
- const llvm::cl::opt<bool> Options::FuncPointerPrint(
271
+ const Option<bool> Options::FuncPointerPrint(
264
272
  "print-fp",
265
- llvm::cl::init(false),
266
- llvm::cl::desc("Print targets of indirect call site")
273
+ "Print targets of indirect call site",
274
+ false
267
275
  );
268
276
 
269
- const llvm::cl::opt<bool> Options::PTSPrint(
277
+ const Option<bool> Options::PTSPrint(
270
278
  "print-pts",
271
- llvm::cl::init(false),
272
- llvm::cl::desc("Print points-to set of top-level pointers")
279
+ "Print points-to set of top-level pointers",
280
+ false
273
281
  );
274
282
 
275
- const llvm::cl::opt<bool> Options::PTSAllPrint(
283
+ const Option<bool> Options::PTSAllPrint(
276
284
  "print-all-pts",
277
- llvm::cl::init(false),
278
- llvm::cl::desc("Print all points-to set of both top-level and address-taken variables")
285
+ "Print all points-to set of both top-level and address-taken variables",
286
+ false
279
287
  );
280
288
 
281
- const llvm::cl::opt<bool> Options::PStat(
289
+ const Option<bool> Options::PStat(
282
290
  "stat",
283
- llvm::cl::init(true),
284
- llvm::cl::desc("Statistic for Pointer analysis")
291
+ "Statistic for Pointer analysis",
292
+ true
285
293
  );
286
294
 
287
- const llvm::cl::opt<unsigned> Options::StatBudget(
295
+ const Option<u32_t> Options::StatBudget(
288
296
  "stat-limit",
289
- llvm::cl::init(20),
290
- llvm::cl::desc("Iteration budget for On-the-fly statistics")
297
+ "Iteration budget for On-the-fly statistics",
298
+ 20
291
299
  );
292
300
 
293
- const llvm::cl::opt<bool> Options::PAGDotGraph(
301
+ const Option<bool> Options::PAGDotGraph(
294
302
  "dump-pag",
295
- llvm::cl::init(false),
296
- llvm::cl::desc("Dump dot graph of SVFIR")
303
+ "Dump dot graph of SVFIR",
304
+ false
297
305
  );
298
306
 
299
- const llvm::cl::opt<bool> Options::ShowSVFIRValue(
307
+ const Option<bool> Options::ShowSVFIRValue(
300
308
  "show-ir-value",
301
- llvm::cl::init(true),
302
- llvm::cl::desc("Show values of SVFIR (e.g., when generating dot graph)")
309
+ "Show values of SVFIR (e.g., when generating dot graph)",
310
+ true
303
311
  );
304
312
 
305
- const llvm::cl::opt<bool> Options::DumpICFG(
313
+ const Option<bool> Options::DumpICFG(
306
314
  "dump-icfg",
307
- llvm::cl::init(false),
308
- llvm::cl::desc("Dump dot graph of ICFG")
315
+ "Dump dot graph of ICFG",
316
+ false
309
317
  );
310
318
 
311
- const llvm::cl::opt<bool> Options::CallGraphDotGraph(
319
+ const Option<bool> Options::CallGraphDotGraph(
312
320
  "dump-callgraph",
313
- llvm::cl::init(false),
314
- llvm::cl::desc("Dump dot graph of Call Graph")
321
+ "Dump dot graph of Call Graph",
322
+ false
315
323
  );
316
324
 
317
- const llvm::cl::opt<bool> Options::PAGPrint(
325
+ const Option<bool> Options::PAGPrint(
318
326
  "print-pag",
319
- llvm::cl::init(false),
320
- llvm::cl::desc("Print SVFIR to command line")
327
+ "Print SVFIR to command line",
328
+ false
321
329
  );
322
330
 
323
- const llvm::cl::opt<unsigned> Options::IndirectCallLimit(
331
+ const Option<u32_t> Options::IndirectCallLimit(
324
332
  "ind-call-limit",
325
- llvm::cl::init(50000),
326
- llvm::cl::desc("Indirect solved call edge limit")
333
+ "Indirect solved call edge limit",
334
+ 50000
327
335
  );
328
336
 
329
- const llvm::cl::opt<bool> Options::UsePreCompFieldSensitive(
337
+ const Option<bool> Options::UsePreCompFieldSensitive(
330
338
  "pre-field-sensitive",
331
- llvm::cl::init(true),
332
- llvm::cl::desc("Use pre-computed field-sensitivity for later analysis")
339
+ "Use pre-computed field-sensitivity for later analysis",
340
+ true
333
341
  );
334
342
 
335
- const llvm::cl::opt<bool> Options::EnableAliasCheck(
343
+ const Option<bool> Options::EnableAliasCheck(
336
344
  "alias-check",
337
- llvm::cl::init(true),
338
- llvm::cl::desc("Enable alias check functions")
345
+ "Enable alias check functions",
346
+ true
339
347
  );
340
348
 
341
- const llvm::cl::opt<bool> Options::EnableThreadCallGraph(
349
+ const Option<bool> Options::EnableThreadCallGraph(
342
350
  "enable-tcg",
343
- llvm::cl::init(true),
344
- llvm::cl::desc("Enable pointer analysis to use thread call graph")
351
+ "Enable pointer analysis to use thread call graph",
352
+ true
345
353
  );
346
354
 
347
- const llvm::cl::opt<bool> Options::ConnectVCallOnCHA(
355
+ const Option<bool> Options::ConnectVCallOnCHA(
348
356
  "v-call-cha",
349
- llvm::cl::init(false),
350
- llvm::cl::desc("connect virtual calls using cha")
357
+ "connect virtual calls using cha",
358
+ false
351
359
  );
352
360
 
353
361
 
354
362
  // PointerAnalysisImpl.cpp
355
- const llvm::cl::opt<bool> Options::INCDFPTData(
363
+ const Option<bool> Options::INCDFPTData(
356
364
  "inc-data",
357
- llvm::cl::init(true),
358
- llvm::cl::desc("Enable incremental DFPTData for flow-sensitive analysis")
365
+ "Enable incremental DFPTData for flow-sensitive analysis",
366
+ true
359
367
  );
360
368
 
361
- const llvm::cl::opt<bool> Options::ClusterAnder(
369
+ const Option<bool> Options::ClusterAnder(
362
370
  "cluster-ander",
363
- llvm::cl::init(false),
364
- llvm::cl::desc("Stage Andersen's with Steensgard's and cluster based on that")
371
+ "Stage Andersen's with Steensgard's and cluster based on that",
372
+ false
365
373
  );
366
374
 
367
- const llvm::cl::opt<bool> Options::ClusterFs(
375
+ const Option<bool> Options::ClusterFs(
368
376
  "cluster-fs",
369
- llvm::cl::init(false),
370
- llvm::cl::desc("Cluster for FS/VFS with auxiliary Andersen's")
377
+ "Cluster for FS/VFS with auxiliary Andersen's",
378
+ false
371
379
  );
372
380
 
373
- const llvm::cl::opt<bool> Options::PlainMappingFs(
381
+ const Option<bool> Options::PlainMappingFs(
374
382
  "plain-mapping-fs",
375
- llvm::cl::init(false),
376
- llvm::cl::desc("Use an explicitly (not null) plain mapping for FS")
383
+ "Use an explicitly (not null) plain mapping for FS",
384
+ false
377
385
  );
378
386
 
379
- const llvm::cl::opt<PointsTo::Type> Options::PtType(
387
+ const OptionMap<PointsTo::Type> Options::PtType(
380
388
  "pt-type",
381
- llvm::cl::init(PointsTo::Type::SBV),
382
- llvm::cl::desc("points-to set data structure to use in all analyses"),
383
- llvm::cl::values(
384
- clEnumValN(PointsTo::Type::SBV, "sbv", "sparse bit-vector"),
385
- clEnumValN(PointsTo::Type::CBV, "cbv", "core bit-vector (dynamic bit-vector without leading and trailing 0s)"),
386
- clEnumValN(PointsTo::Type::BV, "bv", "bit-vector (dynamic bit-vector without trailing 0s)")
387
- )
389
+ "points-to set data structure to use in all analyses",
390
+ PointsTo::Type::SBV,
391
+ {
392
+ {PointsTo::Type::SBV, "sbv", "sparse bit-vector"},
393
+ {PointsTo::Type::CBV, "cbv", "core bit-vector (dynamic bit-vector without leading and trailing 0s)"},
394
+ {PointsTo::Type::BV, "bv", "bit-vector (dynamic bit-vector without trailing 0s)"},
395
+ }
388
396
  );
389
397
 
390
- const llvm::cl::opt<enum hclust_fast_methods> Options::ClusterMethod(
398
+ const OptionMap<enum hclust_fast_methods> Options::ClusterMethod(
391
399
  "cluster-method",
392
- llvm::cl::init(HCLUST_METHOD_SVF_BEST),
393
- llvm::cl::desc("hierarchical clustering method for objects"),
394
- // TODO: maybe add descriptions.
395
- llvm::cl::values(
396
- clEnumValN(HCLUST_METHOD_SINGLE, "single", "single linkage; minimum spanning tree algorithm"),
397
- clEnumValN(HCLUST_METHOD_COMPLETE, "complete", "complete linkage; nearest-neighbour-chain algorithm"),
398
- clEnumValN(HCLUST_METHOD_AVERAGE, "average", "unweighted average linkage; nearest-neighbour-chain algorithm"),
399
- clEnumValN(HCLUST_METHOD_SVF_BEST, "best", "try all linkage criteria; choose best")
400
- )
401
- );
402
-
403
- const llvm::cl::opt<bool> Options::RegionedClustering(
400
+ "hierarchical clustering method for objects",
401
+ HCLUST_METHOD_SVF_BEST,
402
+ {
403
+ {HCLUST_METHOD_SINGLE, "single", "single linkage; minimum spanning tree algorithm"},
404
+ {HCLUST_METHOD_COMPLETE, "complete", "complete linkage; nearest-neighbour-chain algorithm"},
405
+ {HCLUST_METHOD_AVERAGE, "average", "unweighted average linkage; nearest-neighbour-chain algorithm"},
406
+ {HCLUST_METHOD_SVF_BEST, "best", "try all linkage criteria; choose best"},
407
+ }
408
+ );
409
+
410
+ const Option<bool> Options::RegionedClustering(
404
411
  // Use cluster to "gather" the options closer together, even if it sounds a little worse.
405
412
  "cluster-regioned",
406
- llvm::cl::init(true),
407
- llvm::cl::desc("cluster regions separately")
413
+ "cluster regions separately",
414
+ true
408
415
  );
409
416
 
410
- const llvm::cl::opt<bool> Options::RegionAlign(
417
+ const Option<bool> Options::RegionAlign(
411
418
  "cluster-region-aligned",
412
- llvm::cl::init(true),
413
- llvm::cl::desc("align each region's identifiers to the native word size")
419
+ "align each region's identifiers to the native word size",
420
+ true
414
421
  );
415
422
 
416
- const llvm::cl::opt<bool> Options::PredictPtOcc(
423
+ const Option<bool> Options::PredictPtOcc(
417
424
  "cluster-predict-occ",
418
- llvm::cl::init(false),
419
- llvm::cl::desc("try to predict which points-to sets are more important in staged analysis")
425
+ "try to predict which points-to sets are more important in staged analysis",
426
+ false
420
427
  );
421
428
 
422
429
  // Memory region (MemRegion.cpp)
423
- const llvm::cl::opt<bool> Options::IgnoreDeadFun(
430
+ const Option<bool> Options::IgnoreDeadFun(
424
431
  "mssa-ignore-dead-fun",
425
- llvm::cl::init(false),
426
- llvm::cl::desc("Don't construct memory SSA for deadfunction")
432
+ "Don't construct memory SSA for deadfunction",
433
+ false
427
434
  );
428
435
 
429
436
 
430
437
  // Base class of pointer analyses (MemSSA.cpp)
431
- const llvm::cl::opt<bool> Options::DumpMSSA(
438
+ const Option<bool> Options::DumpMSSA(
432
439
  "dump-mssa",
433
- llvm::cl::init(false),
434
- llvm::cl::desc("Dump memory SSA")
440
+ "Dump memory SSA",
441
+ false
435
442
  );
436
443
 
437
- const llvm::cl::opt<std::string> Options::MSSAFun(
444
+ const Option<std::string> Options::MSSAFun(
438
445
  "mssa-fun",
439
- llvm::cl::init(""),
440
- llvm::cl::desc("Please specify which function needs to be dumped")
446
+ "Please specify which function needs to be dumped",
447
+ ""
441
448
  );
442
449
 
443
- const llvm::cl::opt<MemSSA::MemPartition> Options::MemPar(
450
+ const OptionMap<MemSSA::MemPartition> Options::MemPar(
444
451
  "mem-par",
445
- llvm::cl::init(MemSSA::MemPartition::IntraDisjoint),
446
- llvm::cl::desc("Memory region partiion strategies (e.g., for SVFG construction)"),
447
- llvm::cl::values(
448
- clEnumValN(MemSSA::MemPartition::Distinct, "distinct", "memory region per each object"),
449
- clEnumValN(MemSSA::MemPartition::IntraDisjoint, "intra-disjoint", "memory regions partioned based on each function"),
450
- clEnumValN(MemSSA::MemPartition::InterDisjoint, "inter-disjoint", "memory regions partioned across functions"))
452
+ "Memory region partiion strategies (e.g., for SVFG construction)",
453
+ MemSSA::MemPartition::IntraDisjoint,
454
+ {
455
+ {MemSSA::MemPartition::Distinct, "distinct", "memory region per each object"},
456
+ {MemSSA::MemPartition::IntraDisjoint, "intra-disjoint", "memory regions partioned based on each function"},
457
+ {MemSSA::MemPartition::InterDisjoint, "inter-disjoint", "memory regions partioned across functions"},
458
+ }
451
459
  );
452
460
 
453
461
 
454
462
  // SVFG builder (SVFGBuilder.cpp)
455
- const llvm::cl::opt<bool> Options::SVFGWithIndirectCall(
463
+ const Option<bool> Options::SVFGWithIndirectCall(
456
464
  "svfg-with-ind-call",
457
- llvm::cl::init(false),
458
- llvm::cl::desc("Update Indirect Calls for SVFG using pre-analysis")
465
+ "Update Indirect Calls for SVFG using pre-analysis",
466
+ false
459
467
  );
460
468
 
461
- llvm::cl::opt<bool> Options::OPTSVFG(
469
+ Option<bool> Options::OPTSVFG(
462
470
  "opt-svfg",
463
- llvm::cl::init(false),
464
- llvm::cl::desc("Optimize SVFG to eliminate formal-in and actual-out")
471
+ "Optimize SVFG to eliminate formal-in and actual-out",
472
+ false
465
473
  );
466
474
 
467
- const llvm::cl::opt<std::string> Options::WriteSVFG(
475
+ const Option<std::string> Options::WriteSVFG(
468
476
  "write-svfg",
469
- llvm::cl::init(""),
470
- llvm::cl::desc("Write SVFG's analysis results to a file")
477
+ "Write SVFG's analysis results to a file",
478
+ ""
471
479
  );
472
480
 
473
- const llvm::cl::opt<std::string> Options::ReadSVFG(
481
+ const Option<std::string> Options::ReadSVFG(
474
482
  "read-svfg",
475
- llvm::cl::init(""),
476
- llvm::cl::desc("Read SVFG's analysis results from a file")
483
+ "Read SVFG's analysis results from a file",
484
+ ""
477
485
  );
478
486
 
479
487
  // FSMPTA.cpp
480
- const llvm::cl::opt<bool> Options::UsePCG(
488
+ const Option<bool> Options::UsePCG(
481
489
  "pcg-td-edge",
482
- llvm::cl::init(false),
483
- llvm::cl::desc("Use PCG lock for non-sparsely adding SVFG edges")
490
+ "Use PCG lock for non-sparsely adding SVFG edges",
491
+ false
484
492
  );
485
493
 
486
- const llvm::cl::opt<bool> Options::IntraLock(
494
+ const Option<bool> Options::IntraLock(
487
495
  "intra-lock-td-edge",
488
- llvm::cl::init(true),
489
- llvm::cl::desc("Use simple intra-procedual lock for adding SVFG edges")
496
+ "Use simple intra-procedual lock for adding SVFG edges",
497
+ true
490
498
  );
491
499
 
492
- const llvm::cl::opt<bool> Options::ReadPrecisionTDEdge(
500
+ const Option<bool> Options::ReadPrecisionTDEdge(
493
501
  "rp-td-edge",
494
- llvm::cl::init(false),
495
- llvm::cl::desc("perform read precision to refine SVFG edges")
502
+ "perform read precision to refine SVFG edges",
503
+ false
496
504
  );
497
505
 
498
- const llvm::cl::opt<u32_t> Options::AddModelFlag(
506
+ const Option<u32_t> Options::AddModelFlag(
499
507
  "add-td-edge",
500
- llvm::cl::init(0),
501
- llvm::cl::desc("Add thread SVFG edges with models: 0 Non Add Edge; 1 NonSparse; 2 All Optimisation; 3 No MHP; 4 No Alias; 5 No Lock; 6 No Read Precision.")
508
+ "Add thread SVFG edges with models: 0 Non Add Edge; 1 NonSparse; 2 All Optimisation; 3 No MHP; 4 No Alias; 5 No Lock; 6 No Read Precision.",
509
+ 0
502
510
  );
503
511
 
504
512
 
505
513
  // LockAnalysis.cpp
506
- const llvm::cl::opt<bool> Options::PrintLockSpan(
514
+ const Option<bool> Options::PrintLockSpan(
507
515
  "print-lock",
508
- llvm::cl::init(false),
509
- llvm::cl::desc("Print Thread Interleaving Results")
516
+ "Print Thread Interleaving Results",
517
+ false
510
518
  );
511
519
 
512
520
 
513
521
  // MHP.cpp
514
- const llvm::cl::opt<bool> Options::PrintInterLev(
522
+ const Option<bool> Options::PrintInterLev(
515
523
  "print-interlev",
516
- llvm::cl::init(false),
517
- llvm::cl::desc("Print Thread Interleaving Results")
524
+ "Print Thread Interleaving Results",
525
+ false
518
526
  );
519
527
 
520
- const llvm::cl::opt<bool> Options::DoLockAnalysis(
528
+ const Option<bool> Options::DoLockAnalysis(
521
529
  "lock-analysis",
522
- llvm::cl::init(true),
523
- llvm::cl::desc("Run Lock Analysis")
530
+ "Run Lock Analysis",
531
+ true
524
532
  );
525
533
 
526
534
 
527
535
  // MTA.cpp
528
- const llvm::cl::opt<bool> Options::AndersenAnno(
536
+ const Option<bool> Options::AndersenAnno(
529
537
  "tsan-ander",
530
- llvm::cl::init(false),
531
- llvm::cl::desc("Add TSan annotation according to Andersen")
538
+ "Add TSan annotation according to Andersen",
539
+ false
532
540
  );
533
541
 
534
- const llvm::cl::opt<bool> Options::FSAnno(
542
+ const Option<bool> Options::FSAnno(
535
543
  "tsan-fs",
536
- llvm::cl::init(false),
537
- llvm::cl::desc("Add TSan annotation according to flow-sensitive analysis")
544
+ "Add TSan annotation according to flow-sensitive analysis",
545
+ false
538
546
  );
539
547
 
540
548
 
541
549
  // MTAAnnotator.cpp
542
- const llvm::cl::opt<u32_t> Options::AnnoFlag(
550
+ const Option<u32_t> Options::AnnoFlag(
543
551
  "anno",
544
- llvm::cl::init(0),
545
- llvm::cl::desc("prune annotated instructions: 0001 Thread Local; 0002 Alias; 0004 MHP.")
552
+ "prune annotated instructions: 0001 Thread Local; 0002 Alias; 0004 MHP.",
553
+ 0
546
554
  );
547
555
 
548
556
 
549
557
  // MTAResultValidator.cpp
550
- const llvm::cl::opt<bool> Options::PrintValidRes(
558
+ const Option<bool> Options::PrintValidRes(
551
559
  "mhp-validation",
552
- llvm::cl::init(false),
553
- llvm::cl::desc("Print MHP Validation Results")
560
+ "Print MHP Validation Results",
561
+ false
554
562
  );
555
563
  // LockResultValidator.cpp
556
- const llvm::cl::opt<bool> Options::LockValid(
564
+ const Option<bool> Options::LockValid(
557
565
  "lock-validation",
558
- llvm::cl::init(false),
559
- llvm::cl::desc("Print Lock Validation Results")
566
+ "Print Lock Validation Results",
567
+ false
560
568
  );
561
569
 
562
570
 
563
571
  // MTAStat.cpp
564
- const llvm::cl::opt<bool> Options::AllPairMHP(
572
+ const Option<bool> Options::AllPairMHP(
565
573
  "all-pair-mhp",
566
- llvm::cl::init(false),
567
- llvm::cl::desc("All pair MHP computation")
574
+ "All pair MHP computation",
575
+ false
568
576
  );
569
577
 
570
578
 
571
579
  // PCG.cpp
572
- //const llvm::cl::opt<bool> TDPrint(
573
- // "print-td",
574
- // llvm::cl::init(true),
575
- // llvm::cl::desc("Print Thread Analysis Results"));
580
+ //const Option<bool> TDPrint(
581
+ // "print-td",
582
+ // "Print Thread Analysis Results",
583
+ // true
584
+ //);
576
585
 
577
586
 
578
587
  // TCT.cpp
579
- const llvm::cl::opt<bool> Options::TCTDotGraph(
588
+ const Option<bool> Options::TCTDotGraph(
580
589
  "dump-tct",
581
- llvm::cl::init(false),
582
- llvm::cl::desc("Dump dot graph of Call Graph")
590
+ "Dump dot graph of Call Graph",
591
+ false
583
592
  );
584
593
 
585
594
 
586
595
  // LeakChecker.cpp
587
- const llvm::cl::opt<bool> Options::ValidateTests(
596
+ const Option<bool> Options::ValidateTests(
588
597
  "valid-tests",
589
- llvm::cl::init(false),
590
- llvm::cl::desc("Validate memory leak tests")
598
+ "Validate memory leak tests",
599
+ false
591
600
  );
592
601
 
593
602
 
594
603
  // Source-sink analyzer (SrcSnkDDA.cpp)
595
- const llvm::cl::opt<bool> Options::DumpSlice(
604
+ const Option<bool> Options::DumpSlice(
596
605
  "dump-slice",
597
- llvm::cl::init(false),
598
- llvm::cl::desc("Dump dot graph of Saber Slices")
606
+ "Dump dot graph of Saber Slices",
607
+ false
599
608
  );
600
609
 
601
- const llvm::cl::opt<unsigned> Options::CxtLimit(
610
+ const Option<u32_t> Options::CxtLimit(
602
611
  "cxt-limit",
603
- llvm::cl::init(3),
604
- llvm::cl::desc("Source-Sink Analysis Contexts Limit")
612
+ "Source-Sink Analysis Contexts Limit",
613
+ 3
605
614
  );
606
615
 
607
616
 
608
617
  // CHG.cpp
609
- const llvm::cl::opt<bool> Options::DumpCHA(
618
+ const Option<bool> Options::DumpCHA(
610
619
  "dump-cha",
611
- llvm::cl::init(false),
612
- llvm::cl::desc("dump the class hierarchy graph")
620
+ "dump the class hierarchy graph",
621
+ false
613
622
  );
614
623
 
615
624
 
616
625
  // DCHG.cpp
617
- const llvm::cl::opt<bool> Options::PrintDCHG(
626
+ const Option<bool> Options::PrintDCHG(
618
627
  "print-dchg",
619
- llvm::cl::init(false),
620
- llvm::cl::desc("print the DCHG if debug information is available")
628
+ "print the DCHG if debug information is available",
629
+ false
621
630
  );
622
631
 
623
632
 
624
633
  // LLVMModule.cpp
625
- const llvm::cl::opt<std::string> Options::Graphtxt(
634
+ const Option<std::string> Options::Graphtxt(
626
635
  "graph-txt",
627
- llvm::cl::value_desc("filename"),
628
- llvm::cl::desc("graph txt file to build SVFIR")
636
+ "graph txt file to build SVFIR",
637
+ ""
629
638
  );
630
639
 
631
- const llvm::cl::opt<bool> Options::SVFMain(
640
+ const Option<bool> Options::SVFMain(
632
641
  "svf-main",
633
- llvm::cl::init(false),
634
- llvm::cl::desc("add svf.main()")
642
+ "add svf.main()",
643
+ false
635
644
  );
636
645
 
637
- const llvm::cl::opt<bool> Options::ModelConsts(
646
+ const Option<bool> Options::ModelConsts(
638
647
  "model-consts",
639
- llvm::cl::init(false),
640
- llvm::cl::desc("Modeling individual constant objects")
648
+ "Modeling individual constant objects",
649
+ false
641
650
  );
642
651
 
643
- const llvm::cl::opt<bool> Options::ModelArrays(
652
+ const Option<bool> Options::ModelArrays(
644
653
  "model-arrays",
645
- llvm::cl::init(false),
646
- llvm::cl::desc("Modeling Gep offsets for array accesses")
654
+ "Modeling Gep offsets for array accesses",
655
+ false
647
656
  );
648
657
 
649
- const llvm::cl::opt<bool> Options::SymTabPrint(
650
- "print-symbol-table", llvm::cl::init(false),
651
- llvm::cl::desc("Print Symbol Table to command line")
658
+ const Option<bool> Options::SymTabPrint(
659
+ "print-symbol-table",
660
+ "Print Symbol Table to command line",
661
+ false
652
662
  );
653
663
 
654
664
 
655
665
 
656
666
  // Conditions.cpp
657
- const llvm::cl::opt<unsigned> Options::MaxZ3Size(
667
+ const Option<u32_t> Options::MaxZ3Size(
658
668
  "max-z3-size",
659
- llvm::cl::init(30),
660
- llvm::cl::desc("Maximum size limit for Z3 expression")
669
+ "Maximum size limit for Z3 expression",
670
+ 30
661
671
  );
662
672
 
663
673
 
664
674
  // SaberCondAllocator.cpp
665
- const llvm::cl::opt<bool> Options::PrintPathCond(
675
+ const Option<bool> Options::PrintPathCond(
666
676
  "print-pc",
667
- llvm::cl::init(false),
668
- llvm::cl::desc("Print out path condition")
677
+ "Print out path condition",
678
+ false
669
679
  );
670
680
 
671
681
 
672
682
  // SVFUtil.cpp
673
- const llvm::cl::opt<bool> Options::DisableWarn(
683
+ const Option<bool> Options::DisableWarn(
674
684
  "dwarn",
675
- llvm::cl::init(true),
676
- llvm::cl::desc("Disable warning")
685
+ "Disable warning",
686
+ true
677
687
  );
678
688
 
679
689
 
680
690
  // Andersen.cpp
681
- const llvm::cl::opt<bool> Options::ConsCGDotGraph(
691
+ const Option<bool> Options::ConsCGDotGraph(
682
692
  "dump-constraint-graph",
683
- llvm::cl::init(false),
684
- llvm::cl::desc("Dump dot graph of Constraint Graph")
693
+ "Dump dot graph of Constraint Graph",
694
+ false
685
695
  );
686
696
 
687
- const llvm::cl::opt<bool> Options::BriefConsCGDotGraph(
697
+ const Option<bool> Options::BriefConsCGDotGraph(
688
698
  "brief-constraint-graph",
689
- llvm::cl::init(true),
690
- llvm::cl::desc("Dump dot graph of Constraint Graph")
699
+ "Dump dot graph of Constraint Graph",
700
+ true
691
701
  );
692
702
 
693
- const llvm::cl::opt<bool> Options::PrintCGGraph(
703
+ const Option<bool> Options::PrintCGGraph(
694
704
  "print-constraint-graph",
695
- llvm::cl::init(false),
696
- llvm::cl::desc("Print Constraint Graph to Terminal")
705
+ "Print Constraint Graph to Terminal",
706
+ false
697
707
  );
698
708
 
699
- const llvm::cl::opt<std::string> Options::WriteAnder(
709
+ const Option<std::string> Options::WriteAnder(
700
710
  "write-ander",
701
- llvm::cl::init(""),
702
- llvm::cl::desc("-write-ander=ir_annotator (Annotated IR with Andersen's results) or write Andersen's analysis results to a user-specified text file")
711
+ "-write-ander=ir_annotator (Annotated IR with Andersen's results) or write Andersen's analysis results to a user-specified text file",
712
+ ""
703
713
  );
704
714
 
705
- const llvm::cl::opt<std::string> Options::ReadAnder(
715
+ const Option<std::string> Options::ReadAnder(
706
716
  "read-ander",
707
- llvm::cl::init(""),
708
- llvm::cl::desc("-read-ander=ir_annotator (Read Andersen's analysis results from the annotated IR, e.g., *.pre.bc) or from a text file")
717
+ "-read-ander=ir_annotator (Read Andersen's analysis results from the annotated IR, e.g., *.pre.bc) or from a text file",
718
+ ""
709
719
  );
710
720
 
711
- const llvm::cl::opt<bool> Options::DiffPts(
721
+ const Option<bool> Options::DiffPts(
712
722
  "diff",
713
- llvm::cl::init(true),
714
- llvm::cl::desc("Enable differential point-to set")
723
+ "Enable differential point-to set",
724
+ true
715
725
  );
716
726
 
717
- llvm::cl::opt<bool> Options::DetectPWC(
727
+ Option<bool> Options::DetectPWC(
718
728
  "merge-pwc",
719
- llvm::cl::init(true),
720
- llvm::cl::desc("Enable PWC detection")
729
+ "Enable PWC detection",
730
+ true
721
731
  );
722
732
 
723
733
  //SVFIRBuilder.cpp
724
- const llvm::cl::opt<bool> Options::VtableInSVFIR(
734
+ const Option<bool> Options::VtableInSVFIR(
725
735
  "vt-in-ir",
726
- llvm::cl::init(false),
727
- llvm::cl::desc("Handle vtable in ConstantArray/ConstantStruct in SVFIRBuilder (already handled in CHA?)")
736
+ "Handle vtable in ConstantArray/ConstantStruct in SVFIRBuilder (already handled in CHA?)",
737
+ false
728
738
  );
729
739
 
730
740
 
731
741
  //WPAPass.cpp
732
- const llvm::cl::opt<bool> Options::AnderSVFG(
742
+ const Option<bool> Options::AnderSVFG(
733
743
  "svfg",
734
- llvm::cl::init(false),
735
- llvm::cl::desc("Generate SVFG after Andersen's Analysis")
744
+ "Generate SVFG after Andersen's Analysis",
745
+ false
736
746
  );
737
747
 
738
- const llvm::cl::opt<bool> Options::SABERFULLSVFG(
748
+ const Option<bool> Options::SABERFULLSVFG(
739
749
  "saber-full-svfg",
740
- llvm::cl::init(false),
741
- llvm::cl::desc("When using SABER for bug detection pass, enable full svfg on top of the pointer-only one")
750
+ "When using SABER for bug detection pass, enable full svfg on top of the pointer-only one",
751
+ false
742
752
  );
743
753
 
744
- const llvm::cl::opt<bool> Options::PrintAliases(
754
+ const Option<bool> Options::PrintAliases(
745
755
  "print-aliases",
746
- llvm::cl::init(false),
747
- llvm::cl::desc("Print results for all pair aliases")
748
- );
749
-
750
- llvm::cl::bits<PointerAnalysis::PTATY> Options::PASelected(
751
- llvm::cl::desc("Select pointer analysis"),
752
- llvm::cl::values(
753
- clEnumValN(PointerAnalysis::Andersen_WPA, "nander", "Standard inclusion-based analysis"),
754
- clEnumValN(PointerAnalysis::AndersenSCD_WPA, "sander", "Selective cycle detection inclusion-based analysis"),
755
- clEnumValN(PointerAnalysis::AndersenSFR_WPA, "sfrander", "Stride-based field representation includion-based analysis"),
756
- clEnumValN(PointerAnalysis::AndersenWaveDiff_WPA, "ander", "Diff wave propagation inclusion-based analysis"),
757
- clEnumValN(PointerAnalysis::Steensgaard_WPA, "steens", "Steensgaard's pointer analysis"),
758
- // Disabled till further work is done.
759
- clEnumValN(PointerAnalysis::FSSPARSE_WPA, "fspta", "Sparse flow sensitive pointer analysis"),
760
- clEnumValN(PointerAnalysis::VFS_WPA, "vfspta", "Versioned sparse flow-sensitive points-to analysis"),
761
- clEnumValN(PointerAnalysis::TypeCPP_WPA, "type", "Type-based fast analysis for Callgraph, SVFIR and CHA")
762
- ));
763
-
764
-
765
- llvm::cl::bits<WPAPass::AliasCheckRule> Options::AliasRule(llvm::cl::desc("Select alias check rule"),
766
- llvm::cl::values(
767
- clEnumValN(WPAPass::Conservative, "conservative", "return MayAlias if any pta says alias"),
768
- clEnumValN(WPAPass::Veto, "veto", "return NoAlias if any pta says no alias")
769
- ));
770
-
771
- const llvm::cl::opt<bool> Options::ShowHiddenNode(
756
+ "Print results for all pair aliases",
757
+ false
758
+ );
759
+
760
+ OptionMultiple<PointerAnalysis::PTATY> Options::PASelected(
761
+ "Select pointer analysis",
762
+ {
763
+ {PointerAnalysis::Andersen_WPA, "nander", "Standard inclusion-based analysis"},
764
+ {PointerAnalysis::AndersenSCD_WPA, "sander", "Selective cycle detection inclusion-based analysis"},
765
+ {PointerAnalysis::AndersenSFR_WPA, "sfrander", "Stride-based field representation includion-based analysis"},
766
+ {PointerAnalysis::AndersenWaveDiff_WPA, "ander", "Diff wave propagation inclusion-based analysis"},
767
+ {PointerAnalysis::Steensgaard_WPA, "steens", "Steensgaard's pointer analysis"},
768
+ // Disabled till further work is done.
769
+ {PointerAnalysis::FSSPARSE_WPA, "fspta", "Sparse flow sensitive pointer analysis"},
770
+ {PointerAnalysis::VFS_WPA, "vfspta", "Versioned sparse flow-sensitive points-to analysis"},
771
+ {PointerAnalysis::TypeCPP_WPA, "type", "Type-based fast analysis for Callgraph, SVFIR and CHA"},
772
+ }
773
+ );
774
+
775
+
776
+ OptionMultiple<WPAPass::AliasCheckRule> Options::AliasRule(
777
+ "Select alias check rule",
778
+ {
779
+ {WPAPass::Conservative, "conservative", "return MayAlias if any pta says alias"},
780
+ {WPAPass::Veto, "veto", "return NoAlias if any pta says no alias"},
781
+ }
782
+ );
783
+
784
+ const Option<bool> Options::ShowHiddenNode(
772
785
  "show-hidden-nodes",
773
- llvm::cl::init(false),
774
- llvm::cl::desc("Show hidden nodes on DOT Graphs (e.g., isolated node on a graph)")
786
+ "Show hidden nodes on DOT Graphs (e.g., isolated node on a graph)",
787
+ false
775
788
  );
776
789
 
777
- const llvm::cl::opt<std::string> Options::GrammarFilename(
790
+ const Option<std::string> Options::GrammarFilename(
778
791
  "grammar",
779
- llvm::cl::init(""),
780
- llvm::cl::desc("<Grammar textfile>")
792
+ "<Grammar textfile>",
793
+ ""
781
794
  );
782
795
 
783
- const llvm::cl::opt<std::string> Options::CFLGraph(
796
+ const Option<std::string> Options::CFLGraph(
784
797
  "cflgraph",
785
- llvm::cl::init(""),
786
- llvm::cl::desc("<Dot file as the CFLGraph input>")
798
+ "<Dot file as the CFLGraph input>",
799
+ ""
787
800
  );
788
801
 
789
- const llvm::cl::opt<bool> Options::PrintCFL(
802
+ const Option<bool> Options::PrintCFL(
790
803
  "print-cfl",
791
- llvm::cl::init(false),
792
- llvm::cl::desc("Print ir, grammar and cflgraph for debug.")
804
+ "Print ir, grammar and cflgraph for debug.",
805
+ false
793
806
  );
794
807
 
795
- const llvm::cl::opt<bool> Options::FlexSymMap(
808
+ const Option<bool> Options::FlexSymMap(
796
809
  "flex-symmap",
797
- llvm::cl::init(false),
798
- llvm::cl::desc("Extend exist sym map while read graph from dot if sym not in map.")
810
+ "Extend exist sym map while read graph from dot if sym not in map.",
811
+ false
799
812
  );
800
813
 
801
- const llvm::cl::opt<bool> Options::PEGTransfer(
814
+ const Option<bool> Options::PEGTransfer(
802
815
  "peg-transfer",
803
- llvm::cl::init(false),
804
- llvm::cl::desc("When explicit to true, cfl graph builder will transfer PAG load and store edges to copy and addr.")
816
+ "When explicit to true, cfl graph builder will transfer PAG load and store edges to copy and addr.",
817
+ false
805
818
  );
806
819
 
807
- const llvm::cl::opt<bool> Options::CFLSVFG(
820
+ const Option<bool> Options::CFLSVFG(
808
821
  "cflsvfg",
809
- llvm::cl::init(false),
810
- llvm::cl::desc("When explicit to true, cfl graph builder will transfer SVFG to CFL Reachability.")
822
+ "When explicit to true, cfl graph builder will transfer SVFG to CFL Reachability.",
823
+ false
811
824
  );
812
825
 
826
+ const Option<bool> Options::POCRAlias(
827
+ "pocr-alias",
828
+ "When explicit to true, cfl data builder will transfer CFL graph to CFLData.",
829
+ false
830
+ );
813
831
 
814
- const llvm::cl::opt<bool> Options::LoopAnalysis(
832
+ const Option<bool> Options::LoopAnalysis(
815
833
  "loop-analysis",
816
- llvm::cl::init(true),
817
- llvm::cl::desc("Analyze every func and get loop info and loop bounds.")
834
+ "Analyze every func and get loop info and loop bounds.",
835
+ true
818
836
  );
819
837
 
820
- const llvm::cl::opt<unsigned> Options::LoopBound(
838
+ const Option<u32_t> Options::LoopBound(
821
839
  "loop-bound",
822
- llvm::cl::init(1),
823
- llvm::cl::desc("Maximum number of loop"));
840
+ "Maximum number of loop",
841
+ 1
842
+ );
824
843
 
825
844
  } // namespace SVF.