svf-tools 1.0.436 → 1.0.439

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 (395) hide show
  1. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +9 -9
  2. package/SVF-doxygen/html/html/BDDExpr_8cpp.html +81 -0
  3. package/SVF-doxygen/html/html/BDDExpr_8cpp_source.html +122 -0
  4. package/SVF-doxygen/html/html/BDDExpr_8h.html +98 -0
  5. package/SVF-doxygen/html/html/BDDExpr_8h_source.html +131 -0
  6. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
  7. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
  8. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +9 -9
  11. package/SVF-doxygen/html/html/DPItem_8h.html +1 -1
  12. package/SVF-doxygen/html/html/DPItem_8h_source.html +2 -2
  13. package/SVF-doxygen/html/html/ExeState_8cpp.html +82 -0
  14. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +127 -0
  15. package/SVF-doxygen/html/html/ExeState_8h.html +139 -0
  16. package/SVF-doxygen/html/html/ExeState_8h_source.html +128 -0
  17. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +3 -3
  18. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +3 -3
  19. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h.html +1 -1
  20. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +1 -1
  21. package/SVF-doxygen/html/html/FlowSensitive_8cpp.html +1 -1
  22. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +9 -9
  23. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/IRAnnotator_8h.html +2 -2
  25. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
  26. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
  35. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  36. package/SVF-doxygen/html/html/MemSSA_8h_source.html +3 -2
  37. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +6 -6
  38. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  39. package/SVF-doxygen/html/html/Options_8cpp_source.html +113 -114
  40. package/SVF-doxygen/html/html/Options_8h.html +0 -1
  41. package/SVF-doxygen/html/html/Options_8h_source.html +115 -117
  42. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +2 -2
  43. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +4 -5
  44. package/SVF-doxygen/html/html/PathCondAllocator_8h.html +1 -1
  45. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +24 -24
  46. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp.html +1 -1
  47. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +6 -6
  48. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
  49. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +15 -15
  50. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
  51. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +2 -2
  52. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +2 -2
  53. package/SVF-doxygen/html/html/SVFBasicTypes_8h.html +3 -3
  54. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +4 -4
  55. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
  56. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +4 -4
  57. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +3 -3
  59. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/SVFUtil_8cpp.html +1 -1
  61. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +3 -3
  62. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +4 -4
  64. package/SVF-doxygen/html/html/SrcSnkDDA_8h.html +3 -3
  65. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +6 -6
  66. package/SVF-doxygen/html/html/SrcSnkSolver_8h.html +96 -0
  67. package/SVF-doxygen/html/html/SrcSnkSolver_8h_source.html +113 -0
  68. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +3 -3
  69. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +3 -3
  70. package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
  71. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
  72. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp.html +3 -3
  73. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +6 -6
  74. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h.html +2 -2
  75. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
  76. package/SVF-doxygen/html/html/VFG_8cpp_source.html +1 -1
  77. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
  78. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +5 -5
  79. package/SVF-doxygen/html/html/Z3Expr_8h.html +99 -0
  80. package/SVF-doxygen/html/html/Z3Expr_8h_source.html +126 -0
  81. package/SVF-doxygen/html/html/annotated.html +272 -275
  82. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  83. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
  84. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +6 -6
  85. package/SVF-doxygen/html/html/classSVF_1_1BDDExprManager-members.html +117 -0
  86. package/SVF-doxygen/html/html/classSVF_1_1BDDExprManager.html +1318 -0
  87. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +6 -6
  88. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  90. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
  91. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  92. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  93. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +2 -2
  94. package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +0 -9
  95. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
  96. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  97. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
  98. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
  99. package/SVF-doxygen/html/html/classSVF_1_1DPItem.html +3 -4
  100. package/SVF-doxygen/html/html/classSVF_1_1DPItem.png +0 -0
  101. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +76 -76
  102. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +64 -64
  103. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.png +0 -0
  104. package/SVF-doxygen/html/html/classSVF_1_1ExeState-members.html +111 -0
  105. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +1173 -0
  106. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  107. package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +78 -78
  108. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +64 -64
  109. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.png +0 -0
  110. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
  111. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +10 -10
  112. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +8 -8
  113. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
  114. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  115. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
  116. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
  117. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
  118. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +2 -2
  119. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +74 -74
  120. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +68 -68
  121. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.png +0 -0
  122. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  123. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
  124. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  125. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
  126. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
  128. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +3 -3
  129. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +6 -6
  130. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
  131. package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +1 -1
  132. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +11 -11
  133. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +1 -1
  134. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +6 -6
  135. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  136. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  137. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +102 -103
  138. package/SVF-doxygen/html/html/classSVF_1_1Options.html +115 -141
  139. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +3 -3
  140. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator-members.html +3 -3
  141. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +131 -132
  142. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +18 -18
  144. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +2 -2
  146. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +5 -5
  148. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +5 -5
  149. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +4 -4
  150. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +5 -5
  151. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +66 -66
  153. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +86 -86
  154. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.png +0 -0
  155. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver-members.html +106 -0
  156. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver.html +937 -0
  157. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver.png +0 -0
  158. package/SVF-doxygen/html/html/classSVF_1_1StmtDPItem.html +2 -3
  159. package/SVF-doxygen/html/html/classSVF_1_1StmtDPItem.png +0 -0
  160. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  161. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +3 -3
  162. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +5 -5
  163. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
  164. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  165. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  166. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +5 -5
  168. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  169. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +1 -1
  170. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +3 -3
  172. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +13 -13
  173. package/SVF-doxygen/html/html/classSVF_1_1Z3Expr-members.html +46 -15
  174. package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +1451 -104
  175. package/SVF-doxygen/html/html/classes.html +96 -96
  176. package/SVF-doxygen/html/html/dir_66541c162fd98954e2c32089ba9a721f.html +2 -0
  177. package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +2 -0
  178. package/SVF-doxygen/html/html/dir_862d3276083eaac55caed79b9120bf29.html +4 -4
  179. package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +6 -10
  180. package/SVF-doxygen/html/html/dir_ea25a8a5b2904424d8a51916f8b475b2.html +2 -0
  181. package/SVF-doxygen/html/html/dir_fdb79cd259bf25322a80ea604c9317b5.html +2 -0
  182. package/SVF-doxygen/html/html/files.html +42 -40
  183. package/SVF-doxygen/html/html/functions.html +2 -2
  184. package/SVF-doxygen/html/html/functions_0x7e.html +9 -21
  185. package/SVF-doxygen/html/html/functions_a.html +8 -16
  186. package/SVF-doxygen/html/html/functions_b.html +22 -35
  187. package/SVF-doxygen/html/html/functions_c.html +33 -63
  188. package/SVF-doxygen/html/html/functions_d.html +3 -6
  189. package/SVF-doxygen/html/html/functions_e.html +11 -13
  190. package/SVF-doxygen/html/html/functions_enum.html +0 -6
  191. package/SVF-doxygen/html/html/functions_eval_b.html +0 -6
  192. package/SVF-doxygen/html/html/functions_f.html +6 -6
  193. package/SVF-doxygen/html/html/functions_func.html +8 -19
  194. package/SVF-doxygen/html/html/functions_func_0x7e.html +9 -21
  195. package/SVF-doxygen/html/html/functions_func_b.html +12 -15
  196. package/SVF-doxygen/html/html/functions_func_c.html +23 -38
  197. package/SVF-doxygen/html/html/functions_func_d.html +4 -7
  198. package/SVF-doxygen/html/html/functions_func_e.html +5 -4
  199. package/SVF-doxygen/html/html/functions_func_f.html +5 -5
  200. package/SVF-doxygen/html/html/functions_func_g.html +48 -49
  201. package/SVF-doxygen/html/html/functions_func_h.html +2 -7
  202. package/SVF-doxygen/html/html/functions_func_i.html +33 -21
  203. package/SVF-doxygen/html/html/functions_func_l.html +6 -3
  204. package/SVF-doxygen/html/html/functions_func_m.html +0 -1
  205. package/SVF-doxygen/html/html/functions_func_n.html +5 -4
  206. package/SVF-doxygen/html/html/functions_func_o.html +11 -13
  207. package/SVF-doxygen/html/html/functions_func_p.html +7 -17
  208. package/SVF-doxygen/html/html/functions_func_r.html +8 -5
  209. package/SVF-doxygen/html/html/functions_func_s.html +16 -13
  210. package/SVF-doxygen/html/html/functions_func_t.html +3 -1
  211. package/SVF-doxygen/html/html/functions_func_v.html +1 -7
  212. package/SVF-doxygen/html/html/functions_func_z.html +3 -3
  213. package/SVF-doxygen/html/html/functions_g.html +51 -52
  214. package/SVF-doxygen/html/html/functions_h.html +3 -8
  215. package/SVF-doxygen/html/html/functions_i.html +44 -32
  216. package/SVF-doxygen/html/html/functions_l.html +18 -7
  217. package/SVF-doxygen/html/html/functions_m.html +2 -3
  218. package/SVF-doxygen/html/html/functions_n.html +10 -12
  219. package/SVF-doxygen/html/html/functions_o.html +64 -24
  220. package/SVF-doxygen/html/html/functions_p.html +24 -34
  221. package/SVF-doxygen/html/html/functions_r.html +8 -7
  222. package/SVF-doxygen/html/html/functions_rela.html +78 -4
  223. package/SVF-doxygen/html/html/functions_s.html +31 -26
  224. package/SVF-doxygen/html/html/functions_t.html +9 -9
  225. package/SVF-doxygen/html/html/functions_type_b.html +3 -7
  226. package/SVF-doxygen/html/html/functions_type_c.html +4 -4
  227. package/SVF-doxygen/html/html/functions_type_e.html +0 -3
  228. package/SVF-doxygen/html/html/functions_type_g.html +5 -5
  229. package/SVF-doxygen/html/html/functions_type_i.html +4 -7
  230. package/SVF-doxygen/html/html/functions_type_l.html +3 -0
  231. package/SVF-doxygen/html/html/functions_type_n.html +2 -2
  232. package/SVF-doxygen/html/html/functions_type_p.html +0 -4
  233. package/SVF-doxygen/html/html/functions_type_v.html +3 -0
  234. package/SVF-doxygen/html/html/functions_type_w.html +2 -2
  235. package/SVF-doxygen/html/html/functions_v.html +10 -13
  236. package/SVF-doxygen/html/html/functions_vars.html +2 -2
  237. package/SVF-doxygen/html/html/functions_vars_b.html +2 -5
  238. package/SVF-doxygen/html/html/functions_vars_c.html +3 -10
  239. package/SVF-doxygen/html/html/functions_vars_e.html +1 -4
  240. package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
  241. package/SVF-doxygen/html/html/functions_vars_i.html +1 -4
  242. package/SVF-doxygen/html/html/functions_vars_l.html +3 -0
  243. package/SVF-doxygen/html/html/functions_vars_m.html +1 -1
  244. package/SVF-doxygen/html/html/functions_vars_n.html +0 -3
  245. package/SVF-doxygen/html/html/functions_vars_p.html +3 -3
  246. package/SVF-doxygen/html/html/functions_vars_s.html +0 -3
  247. package/SVF-doxygen/html/html/functions_vars_t.html +2 -2
  248. package/SVF-doxygen/html/html/functions_vars_v.html +3 -3
  249. package/SVF-doxygen/html/html/functions_vars_w.html +1 -1
  250. package/SVF-doxygen/html/html/functions_w.html +12 -8
  251. package/SVF-doxygen/html/html/functions_z.html +3 -13
  252. package/SVF-doxygen/html/html/globals.html +3 -0
  253. package/SVF-doxygen/html/html/globals_defs.html +3 -0
  254. package/SVF-doxygen/html/html/globals_defs_f.html +3 -0
  255. package/SVF-doxygen/html/html/globals_f.html +5 -2
  256. package/SVF-doxygen/html/html/globals_s.html +9 -9
  257. package/SVF-doxygen/html/html/hierarchy.html +422 -425
  258. package/SVF-doxygen/html/html/menudata.js +4 -4
  259. package/SVF-doxygen/html/html/namespaceSVF.html +19 -66
  260. package/SVF-doxygen/html/html/namespacemembers_c.html +1 -1
  261. package/SVF-doxygen/html/html/namespacemembers_type.html +1 -7
  262. package/SVF-doxygen/html/html/namespacemembers_v.html +0 -6
  263. package/SVF-doxygen/html/html/search/all_0.js +1 -1
  264. package/SVF-doxygen/html/html/search/all_1.js +3 -4
  265. package/SVF-doxygen/html/html/search/all_10.js +12 -17
  266. package/SVF-doxygen/html/html/search/all_12.js +3 -2
  267. package/SVF-doxygen/html/html/search/all_13.js +19 -18
  268. package/SVF-doxygen/html/html/search/all_14.js +7 -6
  269. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  270. package/SVF-doxygen/html/html/search/all_16.js +3 -6
  271. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  272. package/SVF-doxygen/html/html/search/all_1a.js +3 -5
  273. package/SVF-doxygen/html/html/search/all_1b.js +4 -8
  274. package/SVF-doxygen/html/html/search/all_2.js +14 -15
  275. package/SVF-doxygen/html/html/search/all_3.js +14 -24
  276. package/SVF-doxygen/html/html/search/all_4.js +3 -3
  277. package/SVF-doxygen/html/html/search/all_5.js +7 -4
  278. package/SVF-doxygen/html/html/search/all_6.js +5 -4
  279. package/SVF-doxygen/html/html/search/all_7.js +28 -25
  280. package/SVF-doxygen/html/html/search/all_8.js +4 -3
  281. package/SVF-doxygen/html/html/search/all_9.js +18 -12
  282. package/SVF-doxygen/html/html/search/all_c.js +4 -2
  283. package/SVF-doxygen/html/html/search/all_d.js +2 -2
  284. package/SVF-doxygen/html/html/search/all_e.js +5 -5
  285. package/SVF-doxygen/html/html/search/all_f.js +25 -16
  286. package/SVF-doxygen/html/html/search/classes_1.js +1 -2
  287. package/SVF-doxygen/html/html/search/classes_12.js +1 -2
  288. package/SVF-doxygen/html/html/search/classes_14.js +1 -2
  289. package/SVF-doxygen/html/html/search/classes_2.js +0 -3
  290. package/SVF-doxygen/html/html/search/classes_4.js +1 -0
  291. package/SVF-doxygen/html/html/search/classes_7.js +3 -1
  292. package/SVF-doxygen/html/html/search/classes_d.js +0 -1
  293. package/SVF-doxygen/html/html/search/classes_f.js +1 -0
  294. package/SVF-doxygen/html/html/search/defines_0.js +1 -0
  295. package/SVF-doxygen/html/html/search/defines_5.js +1 -0
  296. package/SVF-doxygen/html/html/search/enums_1.js +0 -2
  297. package/SVF-doxygen/html/html/search/enumvalues_1.js +0 -2
  298. package/SVF-doxygen/html/html/search/files_1.js +2 -0
  299. package/SVF-doxygen/html/html/search/files_12.html +26 -0
  300. package/SVF-doxygen/html/html/search/files_12.js +4 -0
  301. package/SVF-doxygen/html/html/search/files_2.js +0 -3
  302. package/SVF-doxygen/html/html/search/files_4.js +2 -0
  303. package/SVF-doxygen/html/html/search/files_c.js +0 -1
  304. package/SVF-doxygen/html/html/search/files_d.js +1 -0
  305. package/SVF-doxygen/html/html/search/functions_0.js +1 -4
  306. package/SVF-doxygen/html/html/search/functions_1.js +8 -9
  307. package/SVF-doxygen/html/html/search/functions_10.js +7 -6
  308. package/SVF-doxygen/html/html/search/functions_11.js +2 -1
  309. package/SVF-doxygen/html/html/search/functions_13.js +0 -2
  310. package/SVF-doxygen/html/html/search/functions_15.js +2 -2
  311. package/SVF-doxygen/html/html/search/functions_16.js +4 -8
  312. package/SVF-doxygen/html/html/search/functions_2.js +5 -8
  313. package/SVF-doxygen/html/html/search/functions_3.js +3 -3
  314. package/SVF-doxygen/html/html/search/functions_4.js +2 -1
  315. package/SVF-doxygen/html/html/search/functions_5.js +3 -3
  316. package/SVF-doxygen/html/html/search/functions_6.js +25 -22
  317. package/SVF-doxygen/html/html/search/functions_7.js +2 -3
  318. package/SVF-doxygen/html/html/search/functions_8.js +12 -6
  319. package/SVF-doxygen/html/html/search/functions_a.js +1 -0
  320. package/SVF-doxygen/html/html/search/functions_b.js +1 -1
  321. package/SVF-doxygen/html/html/search/functions_c.js +2 -1
  322. package/SVF-doxygen/html/html/search/functions_d.js +7 -7
  323. package/SVF-doxygen/html/html/search/functions_e.js +5 -8
  324. package/SVF-doxygen/html/html/search/functions_f.js +2 -1
  325. package/SVF-doxygen/html/html/search/related_0.js +1 -2
  326. package/SVF-doxygen/html/html/search/related_1.js +1 -2
  327. package/SVF-doxygen/html/html/search/related_2.js +1 -1
  328. package/SVF-doxygen/html/html/search/related_3.js +2 -1
  329. package/SVF-doxygen/html/html/search/related_4.js +2 -2
  330. package/SVF-doxygen/html/html/search/related_5.js +1 -2
  331. package/SVF-doxygen/html/html/search/related_6.js +4 -1
  332. package/SVF-doxygen/html/html/search/related_7.js +2 -4
  333. package/SVF-doxygen/html/html/search/related_8.js +18 -1
  334. package/SVF-doxygen/html/html/search/related_9.js +4 -6
  335. package/SVF-doxygen/html/html/search/related_a.js +1 -2
  336. package/SVF-doxygen/html/html/search/related_b.js +7 -2
  337. package/SVF-doxygen/html/html/search/related_c.html +26 -0
  338. package/SVF-doxygen/html/html/search/related_c.js +5 -0
  339. package/SVF-doxygen/html/html/search/related_d.html +26 -0
  340. package/SVF-doxygen/html/html/search/related_d.js +5 -0
  341. package/SVF-doxygen/html/html/search/searchdata.js +4 -4
  342. package/SVF-doxygen/html/html/search/typedefs_1.js +2 -3
  343. package/SVF-doxygen/html/html/search/typedefs_14.js +1 -2
  344. package/SVF-doxygen/html/html/search/typedefs_15.js +1 -1
  345. package/SVF-doxygen/html/html/search/typedefs_2.js +4 -4
  346. package/SVF-doxygen/html/html/search/typedefs_4.js +1 -1
  347. package/SVF-doxygen/html/html/search/typedefs_6.js +3 -3
  348. package/SVF-doxygen/html/html/search/typedefs_8.js +3 -4
  349. package/SVF-doxygen/html/html/search/typedefs_b.js +1 -0
  350. package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
  351. package/SVF-doxygen/html/html/search/typedefs_f.js +0 -1
  352. package/SVF-doxygen/html/html/search/variables_0.js +1 -1
  353. package/SVF-doxygen/html/html/search/variables_10.js +1 -1
  354. package/SVF-doxygen/html/html/search/variables_13.js +0 -1
  355. package/SVF-doxygen/html/html/search/variables_14.js +3 -3
  356. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  357. package/SVF-doxygen/html/html/search/variables_16.js +1 -1
  358. package/SVF-doxygen/html/html/search/variables_17.js +1 -1
  359. package/SVF-doxygen/html/html/search/variables_2.js +1 -2
  360. package/SVF-doxygen/html/html/search/variables_3.js +4 -6
  361. package/SVF-doxygen/html/html/search/variables_5.js +1 -2
  362. package/SVF-doxygen/html/html/search/variables_6.js +1 -1
  363. package/SVF-doxygen/html/html/search/variables_9.js +1 -2
  364. package/SVF-doxygen/html/html/search/variables_c.js +1 -0
  365. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  366. package/SVF-doxygen/html/html/search/variables_e.js +1 -2
  367. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4-members.html +81 -0
  368. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4.html +131 -0
  369. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1Z3Expr_01_4-members.html +81 -0
  370. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1Z3Expr_01_4.html +131 -0
  371. package/include/MSSA/MemSSA.h +1 -1
  372. package/include/SABER/PathCondAllocator.h +4 -4
  373. package/include/SABER/SrcSnkDDA.h +2 -2
  374. package/include/{Util/CFLSolver.h → SABER/SrcSnkSolver.h} +5 -5
  375. package/include/{Util → SVF-FE}/IRAnnotator.h +0 -0
  376. package/include/Util/BDDExpr.h +182 -0
  377. package/include/Util/DPItem.h +1 -1
  378. package/include/Util/ExeState.h +172 -0
  379. package/include/Util/Options.h +0 -3
  380. package/include/Util/SVFBasicTypes.h +2 -2
  381. package/include/Util/Z3Expr.h +235 -0
  382. package/include/WPA/FlowSensitiveTBHC.h +1 -1
  383. package/include/{Util → WPA}/TypeBasedHeapCloning.h +0 -0
  384. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  385. package/lib/SABER/PathCondAllocator.cpp +1 -1
  386. package/lib/Util/BDDExpr.cpp +206 -0
  387. package/lib/Util/ExeState.cpp +248 -0
  388. package/lib/Util/Options.cpp +0 -11
  389. package/lib/Util/SVFUtil.cpp +1 -1
  390. package/lib/WPA/FlowSensitive.cpp +1 -1
  391. package/lib/{Util → WPA}/TypeBasedHeapCloning.cpp +1 -1
  392. package/package.json +1 -1
  393. package/include/Util/Conditions.h +0 -421
  394. package/include/Util/PathDPItem.h +0 -310
  395. package/lib/Util/Conditions.cpp +0 -440
@@ -1,440 +0,0 @@
1
- //===- Conditions.cpp -- Context/path conditions in the form of BDDs----------//
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 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 General Public License for more details.
17
-
18
- // You should have received a copy of the GNU General Public License
19
- // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
- //
21
- //===----------------------------------------------------------------------===//
22
-
23
-
24
- /*
25
- * Conditions.cpp
26
- *
27
- * Created on: Oct 19, 2021
28
- * Author: Yulei and Xiao
29
- */
30
-
31
- #include "Util/Options.h"
32
- #include "Util/Conditions.h"
33
-
34
- using namespace SVF;
35
- using namespace SVFUtil;
36
-
37
-
38
- CondExpr *CondManager::trueCond = nullptr;
39
- CondExpr *CondManager::falseCond = nullptr;
40
- CondManager *CondManager::condMgr = nullptr;
41
- u32_t CondManager::totalCondNum = 0;
42
-
43
- CondManager *CondManager::getCondMgr(CondMgrKind _condMgrKind) {
44
- if (condMgr == nullptr) {
45
- if (_condMgrKind == BDDMgrK)
46
- condMgr = new BDDManager();
47
- else if (_condMgrKind == Z3MgrK)
48
- condMgr = new Z3Manager();
49
- else
50
- assert(false && "invalid condition manager kind!");
51
- }
52
- return condMgr;
53
- }
54
-
55
- /*!
56
- * Whether **All Paths** are reachable
57
- */
58
- bool CondManager::isAllPathReachable(const CondExpr *e) {
59
- return isEquivalentBranchCond(e, getTrueCond());
60
- }
61
-
62
- Z3Expr *Z3Manager::getOrAddZ3Cond(const Z3Cond &z3Cond) {
63
- auto it = idToCondExprMap.find(z3Cond.id());
64
- if (it != idToCondExprMap.end()) {
65
- return it->second;
66
- } else {
67
- Z3Expr *z3CondExpr = new Z3Expr(z3Cond);
68
- return idToCondExprMap.emplace(z3Cond.id(), z3CondExpr).first->second;
69
- }
70
- }
71
-
72
- Z3Manager::Z3Manager() : sol(cxt) {
73
- const z3::expr &trueExpr = cxt.bool_val(true);
74
- trueCond = getOrAddZ3Cond(trueExpr);
75
- const z3::expr &falseExpr = cxt.bool_val(false);
76
- falseCond = getOrAddZ3Cond(falseExpr);
77
- }
78
-
79
- Z3Manager::~Z3Manager() {
80
- for (const auto &it: idToCondExprMap) {
81
- delete it.second;
82
- }
83
- }
84
-
85
- inline bool Z3Manager::isEquivalentBranchCond(const CondExpr *lhs, const CondExpr *rhs) {
86
- sol.push();
87
- const Z3Expr *z3lhs = dyn_cast<Z3Expr>(lhs);
88
- const Z3Expr *z3rhs = dyn_cast<Z3Expr>(rhs);
89
- assert(z3lhs && z3rhs && "not z3 condition?");
90
- sol.add(z3lhs->getExpr() != z3rhs->getExpr());
91
- z3::check_result res = sol.check();
92
- sol.pop();
93
- return res == z3::unsat;
94
- }
95
-
96
- /// Operations on conditions.
97
- //@{
98
- CondExpr *Z3Manager::AND(CondExpr *lhs, CondExpr *rhs) {
99
- auto *z3lhs = dyn_cast<Z3Expr>(lhs);
100
- auto *z3rhs = dyn_cast<Z3Expr>(rhs);
101
- assert(z3lhs && z3rhs && "not z3 condition?");
102
- if (z3lhs == getFalseCond() || z3rhs == getFalseCond())
103
- return getFalseCond();
104
- else if (z3lhs == getTrueCond())
105
- return z3rhs;
106
- else if (z3rhs == getTrueCond())
107
- return z3lhs;
108
- else {
109
- const z3::expr &expr = z3lhs->getExpr() && z3rhs->getExpr();
110
- return getOrAddZ3Cond(expr);
111
- }
112
- }
113
-
114
- CondExpr *Z3Manager::OR(CondExpr *lhs, CondExpr *rhs) {
115
- auto *z3lhs = dyn_cast<Z3Expr>(lhs);
116
- auto *z3rhs = dyn_cast<Z3Expr>(rhs);
117
- assert(z3lhs && z3rhs && "not z3 condition?");
118
- if (z3lhs == getTrueCond() || z3rhs == getTrueCond())
119
- return getTrueCond();
120
- else if (z3lhs == getFalseCond())
121
- return z3rhs;
122
- else if (z3rhs == getFalseCond())
123
- return z3lhs;
124
- else {
125
- const z3::expr &expr = z3lhs->getExpr() || z3rhs->getExpr();
126
- return getOrAddZ3Cond(expr);
127
- }
128
- }
129
-
130
- CondExpr *Z3Manager::NEG(CondExpr *lhs) {
131
- auto *z3lhs = dyn_cast<Z3Expr>(lhs);
132
- assert(z3lhs && "not z3 condition?");
133
- if (z3lhs == getTrueCond())
134
- return getFalseCond();
135
- else if (z3lhs == getFalseCond())
136
- return getTrueCond();
137
- else {
138
- const z3::expr &expr = !z3lhs->getExpr();
139
- return getOrAddZ3Cond(expr);
140
- }
141
- }
142
- //@}
143
-
144
- CondExpr *Z3Manager::createFreshBranchCond(const Instruction *inst) {
145
- u32_t condCountIdx = totalCondNum++;
146
- const z3::expr &expr = cxt.bool_const(("c" + std::to_string(condCountIdx)).c_str());
147
- auto it = idToCondExprMap.find(expr.id());
148
- if (it != idToCondExprMap.end())
149
- return it->second;
150
- else {
151
- auto *cond = new Z3Expr(expr);
152
- auto *negCond = NEG(cond);
153
- setCondInst(cond, inst);
154
- setNegCondInst(negCond, inst);
155
- return idToCondExprMap.emplace(expr.id(), cond).first->second;
156
- }
157
- }
158
-
159
- /*!
160
- * Extract sub conditions of this expression
161
- */
162
- void Z3Manager::extractSubConds(const CondExpr *cond, NodeBS &support) const {
163
- const auto *z3CondExpr = dyn_cast<Z3Expr>(cond);
164
- assert(z3CondExpr && "not z3 condition?");
165
- if (z3CondExpr->getExpr().num_args() == 1 && isNegCond(z3CondExpr)) {
166
- support.set(z3CondExpr->getExpr().id());
167
- return;
168
- }
169
- if (z3CondExpr->getExpr().num_args() == 0)
170
- if (!z3CondExpr->getExpr().is_true() && !z3CondExpr->getExpr().is_false())
171
- support.set(z3CondExpr->getExpr().id());
172
- for (u32_t i = 0; i < z3CondExpr->getExpr().num_args(); ++i) {
173
- const z3::expr &expr = z3CondExpr->getExpr().arg(i);
174
- extractSubConds(getCond(expr.id()), support);
175
- }
176
- }
177
-
178
- /*!
179
- * Whether the condition is satisfiable
180
- */
181
- bool Z3Manager::isSatisfiable(const CondExpr *cond) {
182
- sol.push();
183
- const Z3Expr *z3CondExpr = dyn_cast<Z3Expr>(cond);
184
- assert(z3CondExpr && "not z3 condition?");
185
- sol.add(z3CondExpr->getExpr());
186
- z3::check_result result = sol.check();
187
- sol.pop();
188
- if (result == z3::sat || result == z3::unknown)
189
- return true;
190
- else
191
- return false;
192
- }
193
-
194
- /*!
195
- * Preprocess the condition,
196
- * e.g., Compressing using And-Inverter-Graph, Gaussian Elimination
197
- */
198
- z3::expr Z3Manager::simplify(const z3::expr &expr) const {
199
- z3::goal g(expr.ctx());
200
- z3::tactic qe =
201
- z3::tactic(expr.ctx(), "aig");
202
- g.add(expr);
203
- z3::apply_result r = qe(g);
204
- z3::expr res(expr.ctx().bool_val(false));
205
- for (u32_t i = 0; i < r.size(); ++i) {
206
- if (res.is_false()) {
207
- res = r[i].as_expr();
208
- } else {
209
- res = res || r[i].as_expr();
210
- }
211
- }
212
- return res;
213
- }
214
-
215
-
216
- /*!
217
- * Print the expressions in this model
218
- */
219
- void Z3Manager::printModel() {
220
- SVFUtil::outs() << sol.check() << "\n";
221
- z3::model m = sol.get_model();
222
- for (u32_t i = 0; i < m.size(); i++) {
223
- z3::func_decl v = m[i];
224
- SVFUtil::outs() << v.name() << " = " << m.get_const_interp(v) << "\n";
225
- }
226
- }
227
-
228
- /*!
229
- * Print out one particular expression
230
- */
231
- inline void Z3Manager::printDbg(const CondExpr *e) {
232
- const Z3Expr *z3CondExpr = dyn_cast<Z3Expr>(e);
233
- assert(z3CondExpr && "not z3 condition?");
234
- SVFUtil::outs() << z3CondExpr->getExpr() << "\n";
235
- }
236
-
237
- /*!
238
- * Return string format of this expression
239
- */
240
- std::string Z3Manager::dumpStr(const CondExpr *e) const {
241
- std::ostringstream out;
242
- const Z3Expr *z3CondExpr = dyn_cast<Z3Expr>(e);
243
- assert(z3CondExpr && "not z3 condition?");
244
- out << z3CondExpr->getExpr();
245
- return out.str();
246
- }
247
-
248
-
249
- /*!
250
- * Get or add a single branch condition,
251
- * e.g., when doing condition conjunction
252
- */
253
- BDDExpr *BDDManager::getOrAddBranchCond(BDDCond *bddCond) {
254
- auto it = bddToBddCondExprMap.find(bddCond);
255
- if (it != bddToBddCondExprMap.end())
256
- return it->second;
257
- else {
258
- auto *cond = new BDDExpr(bddCond);
259
- return bddToBddCondExprMap.emplace(bddCond, cond).first->second;
260
- }
261
- }
262
-
263
- BDDManager::BDDManager() {
264
- m_bdd_mgr = Cudd_Init(0, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0);
265
- trueCond = getOrAddBranchCond(BddOne());
266
- falseCond = getOrAddBranchCond(BddZero());
267
- }
268
-
269
- BDDManager::~BDDManager() {
270
- for (const auto &it: bddToBddCondExprMap) {
271
- delete it.second;
272
- }
273
- Cudd_Quit(m_bdd_mgr);
274
- }
275
-
276
- CondExpr *BDDManager::createFreshBranchCond(const Instruction *inst) {
277
- u32_t condCountIdx = totalCondNum++;
278
- BDDCond *bddCond = createCond(condCountIdx);
279
- auto it = bddToBddCondExprMap.find(bddCond);
280
- if (it != bddToBddCondExprMap.end())
281
- return it->second;
282
- else {
283
- auto *cond = new BDDExpr(bddCond);
284
- setCondInst(cond, inst);
285
- auto *negCond = NEG(cond);
286
- setCondInst(negCond, inst);
287
- return bddToBddCondExprMap.emplace(bddCond, cond).first->second;
288
- }
289
- }
290
-
291
- /// Operations on conditions.
292
- //@{
293
- /// use Cudd_bddAndLimit interface to avoid bdds blow up
294
- CondExpr *BDDManager::AND(CondExpr *lhs, CondExpr *rhs) {
295
- auto *bddlhs = dyn_cast<BDDExpr>(lhs);
296
- auto *bddrhs = dyn_cast<BDDExpr>(rhs);
297
- assert(bddlhs && bddrhs && "not bdd condition?");
298
- if (bddlhs == getFalseCond() || bddrhs == getFalseCond())
299
- return getFalseCond();
300
- else if (bddlhs == getTrueCond())
301
- return bddrhs;
302
- else if (bddrhs == getTrueCond())
303
- return bddlhs;
304
- else {
305
- BDDCond *tmp = Cudd_bddAndLimit(m_bdd_mgr, bddlhs->getBDDCond(), bddrhs->getBDDCond(), Options::MaxBddSize);
306
- if (tmp == nullptr) {
307
- SVFUtil::writeWrnMsg("exceeds max bdd size \n");
308
- ///drop the rhs condition
309
- return bddlhs;
310
- } else {
311
- Cudd_Ref(tmp);
312
- return getOrAddBranchCond(tmp);
313
- }
314
- }
315
- }
316
-
317
- /*!
318
- * Use Cudd_bddOrLimit interface to avoid bdds blow up
319
- */
320
- CondExpr *BDDManager::OR(CondExpr *lhs, CondExpr *rhs) {
321
- auto *bddlhs = dyn_cast<BDDExpr>(lhs);
322
- auto *bddrhs = dyn_cast<BDDExpr>(rhs);
323
- assert(bddlhs && bddrhs && "not bdd condition?");
324
-
325
- if (bddlhs == getTrueCond() || bddrhs == getTrueCond())
326
- return getTrueCond();
327
- else if (bddlhs == getFalseCond())
328
- return bddrhs;
329
- else if (bddrhs == getFalseCond())
330
- return bddlhs;
331
- else {
332
- BDDCond *tmp = Cudd_bddOrLimit(m_bdd_mgr, bddlhs->getBDDCond(), bddrhs->getBDDCond(), Options::MaxBddSize);
333
- if (tmp == nullptr) {
334
- SVFUtil::writeWrnMsg("exceeds max bdd size \n");
335
- /// drop the two conditions here
336
- return getTrueCond();
337
- } else {
338
- Cudd_Ref(tmp);
339
- return getOrAddBranchCond(tmp);
340
- }
341
- }
342
- }
343
-
344
- CondExpr *BDDManager::NEG(CondExpr *lhs) {
345
- auto *bddlhs = dyn_cast<BDDExpr>(lhs);
346
- assert(bddlhs && "not bdd condition?");
347
-
348
- if (bddlhs == getTrueCond())
349
- return getFalseCond();
350
- else if (bddlhs == getFalseCond())
351
- return getTrueCond();
352
- else
353
- return getOrAddBranchCond(Cudd_Not(bddlhs->getBDDCond()));
354
- }
355
- //@}
356
-
357
- /*!
358
- * Whether the condition is satisfiable
359
- */
360
- bool BDDManager::isSatisfiable(const CondExpr *cond) {
361
- return cond != getFalseCond();
362
- }
363
-
364
- /*!
365
- * Utilities for dumping conditions. These methods use global functions from CUDD
366
- * package and they can be removed outside this class scope to be used by others.
367
- */
368
- void BDDManager::ddClearFlag(BDDCond *f) const {
369
- if (!Cudd_IsComplement(f->next))
370
- return;
371
- /* Clear visited flag. */
372
- f->next = Cudd_Regular(f->next);
373
- if (cuddIsConstant(f))
374
- return;
375
- ddClearFlag(cuddT(f));
376
- ddClearFlag(Cudd_Regular(cuddE(f)));
377
- return;
378
- }
379
-
380
- void BDDManager::BddSupportStep(BDDCond *f, NodeBS &support) const {
381
- if (cuddIsConstant(f) || Cudd_IsComplement(f->next))
382
- return;
383
-
384
- support.set(f->index);
385
-
386
- BddSupportStep(cuddT(f), support);
387
- BddSupportStep(Cudd_Regular(cuddE(f)), support);
388
- /* Mark as visited. */
389
- f->next = Cudd_Complement(f->next);
390
- }
391
-
392
- void BDDManager::extractSubConds(const CondExpr *f, NodeBS &support) const {
393
- const auto *bddCondExpr = dyn_cast<BDDExpr>(f);
394
- assert(bddCondExpr && "not bdd condition?");
395
- BddSupportStep(Cudd_Regular(bddCondExpr->getBDDCond()), support);
396
- ddClearFlag(Cudd_Regular(bddCondExpr->getBDDCond()));
397
- }
398
-
399
- /*!
400
- * Dump BDD
401
- */
402
- void BDDManager::dump(const CondExpr *lhs, OutStream &O) {
403
- if (lhs == getTrueCond())
404
- O << "T";
405
- else {
406
- NodeBS support;
407
- extractSubConds(lhs, support);
408
- for (NodeBS::iterator iter = support.begin(); iter != support.end();
409
- ++iter) {
410
- unsigned rid = *iter;
411
- O << rid << " ";
412
- }
413
- }
414
- }
415
-
416
-
417
- /*!
418
- * Dump BDD
419
- */
420
- std::string BDDManager::dumpStr(const CondExpr *e) const {
421
- const auto *bddCondExpr = dyn_cast<BDDExpr>(e);
422
- assert(bddCondExpr && "not bdd condition?");
423
- std::string str;
424
- if (bddCondExpr == getTrueCond())
425
- str += "T";
426
- else {
427
- NodeBS support;
428
- extractSubConds(bddCondExpr, support);
429
- for (NodeBS::iterator iter = support.begin(); iter != support.end();
430
- ++iter) {
431
- unsigned rid = *iter;
432
- char int2str[16];
433
- sprintf(int2str, "%d", rid);
434
- str += int2str;
435
- str += " ";
436
- }
437
- }
438
- return str;
439
- }
440
-