svf-tools 1.0.351 → 1.0.355

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 (341) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +2 -2
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
  5. package/SVF-doxygen/html/html/CSC_8cpp_source.html +2 -2
  6. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +2 -2
  7. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  8. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +44 -45
  9. package/SVF-doxygen/html/html/ConsG_8h_source.html +23 -23
  10. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +13 -11
  11. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +6 -6
  12. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
  14. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
  15. package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
  16. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +9 -9
  19. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +6 -4
  20. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +2 -2
  21. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +5 -5
  22. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +2 -2
  23. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +33 -31
  24. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +17 -17
  25. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +30 -30
  26. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +26 -26
  27. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +3 -3
  28. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +10 -9
  29. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
  30. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +4 -4
  31. package/SVF-doxygen/html/html/IRGraph_8h_source.html +2 -2
  32. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +19 -8
  33. package/SVF-doxygen/html/html/LocationSet_8h_source.html +6 -6
  34. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
  35. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +2 -2
  36. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +9 -9
  37. package/SVF-doxygen/html/html/MemRegion_8h_source.html +2 -2
  38. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  39. package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
  40. package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -1
  41. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
  42. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +17 -18
  43. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +8 -8
  44. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +19 -22
  45. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
  46. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +7 -8
  47. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +8 -8
  48. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
  49. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +8 -8
  50. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +8 -7
  52. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +34 -35
  53. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +45 -46
  54. package/SVF-doxygen/html/html/SVFIR_8h_source.html +40 -41
  55. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +21 -23
  56. package/SVF-doxygen/html/html/SVFStatements_8h.html +0 -4
  57. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +150 -156
  58. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  59. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +102 -102
  60. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  61. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +1 -1
  62. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +22 -22
  64. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
  65. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +51 -50
  66. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +67 -62
  67. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +4 -4
  68. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +13 -13
  69. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +1 -1
  70. package/SVF-doxygen/html/html/VFGNode_8h_source.html +16 -15
  71. package/SVF-doxygen/html/html/VFG_8cpp_source.html +50 -51
  72. package/SVF-doxygen/html/html/VFG_8h_source.html +35 -35
  73. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
  74. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
  75. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +1 -1
  76. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -6
  77. package/SVF-doxygen/html/html/WPAPass_8h_source.html +2 -2
  78. package/SVF-doxygen/html/html/annotated.html +100 -102
  79. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
  80. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +24 -25
  81. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +17 -18
  82. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
  83. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  84. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +5 -5
  85. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +5 -5
  86. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +4 -4
  87. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
  88. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt-members.html +28 -29
  89. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +25 -30
  90. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.png +0 -0
  91. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +9 -9
  92. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +28 -29
  93. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +23 -24
  94. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -2
  95. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +36 -35
  96. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +146 -93
  97. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +1 -1
  98. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +8 -8
  99. package/SVF-doxygen/html/html/classSVF_1_1CSC.html +2 -2
  100. package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +27 -28
  101. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +24 -25
  102. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +11 -11
  103. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +12 -12
  104. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +1 -1
  105. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +15 -15
  106. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +30 -31
  107. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +24 -25
  108. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -2
  109. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph-members.html +1 -1
  110. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +95 -96
  111. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
  112. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
  113. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +20 -19
  114. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +24 -25
  115. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +17 -18
  116. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +4 -4
  117. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +5 -5
  118. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
  119. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
  120. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +3 -3
  121. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +3 -3
  122. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +6 -6
  123. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +13 -13
  124. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +13 -13
  125. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +14 -14
  126. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +8 -7
  128. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +78 -80
  129. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +7 -7
  130. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +63 -62
  131. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  132. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +21 -20
  133. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  134. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +1 -1
  135. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +42 -42
  136. package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +58 -55
  137. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +170 -50
  138. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.png +0 -0
  139. package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +2 -2
  140. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +39 -39
  141. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +3 -1
  142. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +7 -8
  143. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +2 -2
  146. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +27 -28
  147. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +17 -18
  148. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +22 -21
  149. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +86 -32
  150. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +12 -12
  151. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
  152. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder-members.html +2 -4
  153. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +11 -15
  154. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +87 -87
  156. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
  157. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +33 -34
  159. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +32 -33
  160. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +5 -5
  161. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +6 -6
  162. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +98 -98
  163. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +18 -18
  164. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG-members.html +1 -1
  165. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
  166. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +5 -5
  167. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -2
  168. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +19 -20
  169. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +30 -31
  170. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +23 -24
  171. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +45 -50
  172. package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +27 -28
  173. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +24 -25
  174. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +13 -13
  175. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +2 -2
  176. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +16 -16
  177. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder-members.html +2 -4
  178. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +33 -79
  179. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +2 -2
  180. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +10 -10
  181. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +3 -3
  183. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +94 -95
  184. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
  185. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +103 -97
  186. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +24 -25
  187. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +49 -53
  188. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
  189. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +3 -3
  190. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +2 -4
  191. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +11 -15
  192. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +4 -4
  193. package/SVF-doxygen/html/html/classSVF_1_1StInfo-members.html +13 -6
  194. package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +263 -37
  195. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +3 -3
  196. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +24 -25
  197. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +18 -19
  198. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +24 -24
  199. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +65 -64
  200. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +90 -63
  201. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +26 -27
  202. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +18 -19
  203. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +26 -27
  204. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +18 -19
  205. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +4 -4
  206. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  207. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +21 -21
  208. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt-members.html +29 -30
  209. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +30 -31
  210. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +2 -2
  211. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +79 -80
  212. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +11 -11
  213. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +13 -13
  214. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +4 -4
  215. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +5 -5
  216. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +13 -14
  217. package/SVF-doxygen/html/html/classes.html +95 -93
  218. package/SVF-doxygen/html/html/functions_a.html +18 -17
  219. package/SVF-doxygen/html/html/functions_b.html +5 -11
  220. package/SVF-doxygen/html/html/functions_c.html +22 -22
  221. package/SVF-doxygen/html/html/functions_eval_g.html +2 -1
  222. package/SVF-doxygen/html/html/functions_eval_n.html +0 -1
  223. package/SVF-doxygen/html/html/functions_eval_v.html +0 -1
  224. package/SVF-doxygen/html/html/functions_f.html +20 -15
  225. package/SVF-doxygen/html/html/functions_func.html +19 -18
  226. package/SVF-doxygen/html/html/functions_func_b.html +0 -6
  227. package/SVF-doxygen/html/html/functions_func_c.html +20 -22
  228. package/SVF-doxygen/html/html/functions_func_g.html +37 -24
  229. package/SVF-doxygen/html/html/functions_func_i.html +7 -4
  230. package/SVF-doxygen/html/html/functions_func_n.html +0 -3
  231. package/SVF-doxygen/html/html/functions_func_o.html +3 -4
  232. package/SVF-doxygen/html/html/functions_func_s.html +4 -4
  233. package/SVF-doxygen/html/html/functions_func_t.html +0 -2
  234. package/SVF-doxygen/html/html/functions_func_v.html +0 -3
  235. package/SVF-doxygen/html/html/functions_g.html +37 -23
  236. package/SVF-doxygen/html/html/functions_i.html +9 -6
  237. package/SVF-doxygen/html/html/functions_l.html +5 -5
  238. package/SVF-doxygen/html/html/functions_m.html +1 -1
  239. package/SVF-doxygen/html/html/functions_n.html +0 -4
  240. package/SVF-doxygen/html/html/functions_o.html +12 -15
  241. package/SVF-doxygen/html/html/functions_p.html +12 -12
  242. package/SVF-doxygen/html/html/functions_r.html +9 -5
  243. package/SVF-doxygen/html/html/functions_s.html +24 -16
  244. package/SVF-doxygen/html/html/functions_t.html +10 -10
  245. package/SVF-doxygen/html/html/functions_type_s.html +3 -0
  246. package/SVF-doxygen/html/html/functions_v.html +10 -11
  247. package/SVF-doxygen/html/html/functions_vars_f.html +3 -0
  248. package/SVF-doxygen/html/html/functions_vars_s.html +4 -1
  249. package/SVF-doxygen/html/html/functions_vars_v.html +3 -0
  250. package/SVF-doxygen/html/html/hierarchy.html +55 -57
  251. package/SVF-doxygen/html/html/namespaceSVF.html +0 -4
  252. package/SVF-doxygen/html/html/search/all_1.js +8 -8
  253. package/SVF-doxygen/html/html/search/all_10.js +7 -7
  254. package/SVF-doxygen/html/html/search/all_12.js +1 -1
  255. package/SVF-doxygen/html/html/search/all_13.js +11 -9
  256. package/SVF-doxygen/html/html/search/all_14.js +7 -7
  257. package/SVF-doxygen/html/html/search/all_16.js +4 -4
  258. package/SVF-doxygen/html/html/search/all_2.js +1 -3
  259. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  260. package/SVF-doxygen/html/html/search/all_6.js +1 -0
  261. package/SVF-doxygen/html/html/search/all_7.js +10 -6
  262. package/SVF-doxygen/html/html/search/all_9.js +2 -1
  263. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  264. package/SVF-doxygen/html/html/search/all_d.js +3 -3
  265. package/SVF-doxygen/html/html/search/all_e.js +4 -5
  266. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  267. package/SVF-doxygen/html/html/search/classes_12.js +0 -1
  268. package/SVF-doxygen/html/html/search/classes_b.js +0 -1
  269. package/SVF-doxygen/html/html/search/enumvalues_12.js +1 -1
  270. package/SVF-doxygen/html/html/search/enumvalues_6.js +1 -1
  271. package/SVF-doxygen/html/html/search/enumvalues_b.js +1 -1
  272. package/SVF-doxygen/html/html/search/functions_0.js +8 -8
  273. package/SVF-doxygen/html/html/search/functions_1.js +1 -3
  274. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  275. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  276. package/SVF-doxygen/html/html/search/functions_13.js +0 -1
  277. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  278. package/SVF-doxygen/html/html/search/functions_6.js +9 -5
  279. package/SVF-doxygen/html/html/search/functions_8.js +2 -1
  280. package/SVF-doxygen/html/html/search/functions_c.js +0 -1
  281. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  282. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -0
  283. package/SVF-doxygen/html/html/search/variables_13.js +2 -1
  284. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  285. package/SVF-doxygen/html/html/search/variables_16.js +1 -0
  286. package/SVF-doxygen/html/html/search/variables_6.js +1 -0
  287. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  288. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
  289. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +16 -16
  290. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  291. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
  292. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +3 -3
  293. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  294. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +2 -2
  295. package/include/DDA/DDAVFSolver.h +1 -1
  296. package/include/Graphs/ConsG.h +2 -2
  297. package/include/Graphs/ConsGEdge.h +1 -1
  298. package/include/Graphs/VFG.h +2 -2
  299. package/include/Graphs/VFGNode.h +1 -1
  300. package/include/MSSA/SVFGBuilder.h +0 -2
  301. package/include/MemoryModel/LocationSet.h +4 -0
  302. package/include/MemoryModel/SVFIR.h +3 -3
  303. package/include/MemoryModel/SVFStatements.h +40 -97
  304. package/include/MemoryModel/SVFVariables.h +9 -6
  305. package/include/MemoryModel/SymbolTableInfo.h +27 -6
  306. package/include/SVF-FE/DCHG.h +1 -1
  307. package/include/SVF-FE/SVFIRBuilder.h +6 -6
  308. package/include/Util/IRAnnotator.h +1 -1
  309. package/lib/DDA/ContextDDA.cpp +4 -5
  310. package/lib/DDA/DDAClient.cpp +6 -6
  311. package/lib/DDA/DDAStat.cpp +1 -1
  312. package/lib/DDA/FlowDDA.cpp +4 -5
  313. package/lib/Graphs/ConsG.cpp +26 -31
  314. package/lib/Graphs/ICFG.cpp +4 -0
  315. package/lib/Graphs/SVFG.cpp +2 -2
  316. package/lib/Graphs/VFG.cpp +36 -43
  317. package/lib/MSSA/SVFGBuilder.cpp +4 -11
  318. package/lib/MTA/MTAAnnotator.cpp +3 -3
  319. package/lib/MemoryModel/LocationSet.cpp +69 -7
  320. package/lib/MemoryModel/PointerAnalysis.cpp +0 -6
  321. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  322. package/lib/MemoryModel/SVFIR.cpp +27 -35
  323. package/lib/MemoryModel/SVFStatements.cpp +0 -22
  324. package/lib/MemoryModel/SVFVariables.cpp +1 -1
  325. package/lib/MemoryModel/SymbolTableInfo.cpp +24 -17
  326. package/lib/SABER/SrcSnkDDA.cpp +2 -2
  327. package/lib/SVF-FE/DCHG.cpp +1 -1
  328. package/lib/SVF-FE/Graph2Json.cpp +24 -27
  329. package/lib/SVF-FE/SVFIRBuilder.cpp +9 -4
  330. package/lib/Util/Options.cpp +1 -1
  331. package/lib/Util/PTAStat.cpp +9 -9
  332. package/lib/Util/TypeBasedHeapCloning.cpp +5 -5
  333. package/lib/WPA/AndersenSFR.cpp +2 -2
  334. package/lib/WPA/AndersenStat.cpp +2 -2
  335. package/lib/WPA/CSC.cpp +2 -2
  336. package/lib/WPA/FlowSensitive.cpp +7 -12
  337. package/lib/WPA/FlowSensitiveStat.cpp +2 -2
  338. package/lib/WPA/FlowSensitiveTBHC.cpp +6 -9
  339. package/lib/WPA/WPAPass.cpp +1 -9
  340. package/package.json +1 -1
  341. package/tools/Example/svf-ex.cpp +1 -1
@@ -241,10 +241,13 @@ private:
241
241
  /// Has incoming VariantGepEdges
242
242
  inline bool hasIncomingVariantGepEdge() const
243
243
  {
244
- SVFStmt::KindToSVFStmtMapTy::const_iterator it = InEdgeKindToSetMap.find(SVFStmt::VariantGep);
244
+ SVFStmt::KindToSVFStmtMapTy::const_iterator it = InEdgeKindToSetMap.find(SVFStmt::Gep);
245
245
  if (it != InEdgeKindToSetMap.end())
246
246
  {
247
- return (!it->second.empty());
247
+ for(auto gep : it->second){
248
+ if(SVFUtil::cast<GepStmt>(gep)->isVariantFieldGep())
249
+ return true;
250
+ }
248
251
  }
249
252
  return false;
250
253
  }
@@ -422,7 +425,7 @@ public:
422
425
  }
423
426
 
424
427
  /// offset of the base value variable
425
- inline s64_t getFieldOffset() const
428
+ inline s64_t getConstantFieldIdx() const
426
429
  {
427
430
  return ls.accumulateConstantFieldIdx();
428
431
  }
@@ -431,8 +434,8 @@ public:
431
434
  inline const std::string getValueName() const
432
435
  {
433
436
  if (value && value->hasName())
434
- return value->getName().str() + "_" + llvm::utostr(getFieldOffset());
435
- return "offset_" + llvm::utostr(getFieldOffset());
437
+ return value->getName().str() + "_" + llvm::utostr(getConstantFieldIdx());
438
+ return "offset_" + llvm::utostr(getConstantFieldIdx());
436
439
  }
437
440
 
438
441
  inline const Type* getType() const
@@ -497,7 +500,7 @@ public:
497
500
  }
498
501
 
499
502
  /// offset of the mem object
500
- inline s64_t getFieldOffset() const
503
+ inline s64_t getConstantFieldIdx() const
501
504
  {
502
505
  return ls.accumulateConstantFieldIdx();
503
506
  }
@@ -364,7 +364,11 @@ public:
364
364
  }
365
365
 
366
366
  ///Get a reference to the components of struct_info.
367
- const std::vector<u32_t>& getFlattenedFieldIdxVec(const Type *T);
367
+ /// Flatterned full offset information of a struct including its array fields
368
+ const std::vector<u32_t>& getFlattenedOffsetVec(const StructType *T);
369
+ /// Flatterned field index information of a struct ignoring any array field
370
+ const std::vector<u32_t>& getFlattenedFieldIdxVec(const StructType *T);
371
+
368
372
  const std::vector<FlattenedFieldInfo>& getFlattenedFieldInfoVec(const Type *T);
369
373
 
370
374
  /// struct A { int id; int salary; }; struct B { char name[20]; struct A a;} B b;
@@ -501,25 +505,32 @@ public:
501
505
 
502
506
 
503
507
  /*!
504
- * Struct information
508
+ * Flatterned type information of StructType, ArrayType and SingleValueType
505
509
  */
506
510
  class StInfo
507
511
  {
508
512
 
509
513
  private:
510
- /// flattened field indices of a struct
514
+ /// flattened field indices of a struct (ignoring arrays)
511
515
  std::vector<u32_t> fldIdxVec;
516
+ /// flattened full offset (including array strides)
517
+ std::vector<u32_t> fullOffsetVec;
512
518
  /// Types of all fields of a struct
513
519
  Map<u32_t, const Type*> fldIdx2TypeMap;
514
520
  /// All field infos after flattening a struct
515
521
  std::vector<FlattenedFieldInfo> finfo;
516
-
522
+ /// stride represents the number of repetitive elements if this StInfo represent an ArrayType. stride is 1 by default.
523
+ u32_t stride;
517
524
  /// Max field limit
518
525
  static u32_t maxFieldLimit;
519
526
 
527
+ StInfo(); ///< place holder
528
+ StInfo(const StInfo& st); ///< place holder
529
+ void operator=(const StInfo&); ///< place holder
530
+
520
531
  public:
521
532
  /// Constructor
522
- StInfo()
533
+ StInfo(u32_t s) : stride(s)
523
534
  {
524
535
  }
525
536
  /// Destructor
@@ -560,6 +571,10 @@ public:
560
571
  {
561
572
  return fldIdxVec;
562
573
  }
574
+ inline std::vector<u32_t>& getFlattenedOffsetVec()
575
+ {
576
+ return fullOffsetVec;
577
+ }
563
578
  inline std::vector<FlattenedFieldInfo>& getFlattenedFieldInfoVec()
564
579
  {
565
580
  return finfo;
@@ -567,11 +582,17 @@ public:
567
582
  //@}
568
583
 
569
584
  /// Add field (index and offset) with its corresponding type
570
- inline void addFldWithType(u32_t fldIdx, const Type* type)
585
+ inline void addFldWithType(u32_t fldIdx, const Type* type, u32_t fullOffset)
571
586
  {
572
587
  fldIdxVec.push_back(fldIdx);
588
+ fullOffsetVec.push_back(fullOffset);
573
589
  fldIdx2TypeMap[fldIdx] = type;
574
590
  }
591
+
592
+ /// Array Type can have
593
+ inline u32_t getStride() const {
594
+ return stride;
595
+ }
575
596
  };
576
597
 
577
598
  /*!
@@ -46,7 +46,7 @@ public:
46
46
  {
47
47
  }
48
48
 
49
- u32_t getFieldOffset(void) const
49
+ u32_t getConstantFieldIdx(void) const
50
50
  {
51
51
  return offset;
52
52
  }
@@ -72,7 +72,7 @@ public:
72
72
  /// Initialize nodes and edges
73
73
  //@{
74
74
  void initialiseNodes();
75
- void addEdge(NodeID src, NodeID dst, PAGEdge::PEDGEK kind,
75
+ void addEdge(NodeID src, NodeID dst, SVFStmt::PEDGEK kind,
76
76
  s64_t offset = 0, Instruction* cs = nullptr);
77
77
  // @}
78
78
 
@@ -331,7 +331,7 @@ public:
331
331
  return edge;
332
332
  }
333
333
  /// Add Branch statement
334
- inline BranchStmt* addBranchStmt(NodeID br, NodeID cond, const std::vector<const ICFGNode*> succs){
334
+ inline BranchStmt* addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec& succs){
335
335
  BranchStmt *edge = pag->addBranchStmt(br, cond, succs);
336
336
  setCurrentBBAndValueForPAGEdge(edge);
337
337
  return edge;
@@ -377,16 +377,16 @@ public:
377
377
  return edge;
378
378
  }
379
379
  /// Add Offset(Gep) edge
380
- inline NormalGepStmt* addNormalGepEdge(NodeID src, NodeID dst, const LocationSet& ls)
380
+ inline GepStmt* addNormalGepEdge(NodeID src, NodeID dst, const LocationSet& ls)
381
381
  {
382
- NormalGepStmt *edge = pag->addNormalGepStmt(src, dst, ls);
382
+ GepStmt *edge = pag->addNormalGepStmt(src, dst, ls);
383
383
  setCurrentBBAndValueForPAGEdge(edge);
384
384
  return edge;
385
385
  }
386
386
  /// Add Variant(Gep) edge
387
- inline VariantGepStmt* addVariantGepEdge(NodeID src, NodeID dst, const LocationSet& ls)
387
+ inline GepStmt* addVariantGepEdge(NodeID src, NodeID dst, const LocationSet& ls)
388
388
  {
389
- VariantGepStmt *edge = pag->addVariantGepStmt(src, dst, ls);
389
+ GepStmt *edge = pag->addVariantGepStmt(src, dst, ls);
390
390
  setCurrentBBAndValueForPAGEdge(edge);
391
391
  return edge;
392
392
  }
@@ -64,7 +64,7 @@ private:
64
64
  void writePAGgepNode(SVF::NodeID nodeId, GepObjVar* gepNode)
65
65
  {
66
66
  auto baseNodeId = gepNode->getBaseNode();
67
- auto locationSetOffset = gepNode->getFieldOffset();
67
+ auto locationSetOffset = gepNode->getConstantFieldIdx();
68
68
 
69
69
  LLVMContext &context = mainModule->getContext();
70
70
  llvm::SmallVector<llvm::Metadata *, 32> operands;
@@ -140,19 +140,18 @@ CxtPtSet ContextDDA::processGepPts(const GepSVFGNode* gep, const CxtPtSet& srcPt
140
140
  tmpDstPts.set(ptd);
141
141
  else
142
142
  {
143
- if (SVFUtil::isa<VariantGepStmt>(gep->getPAGEdge()))
143
+ const GepStmt* gepStmt = SVFUtil::cast<GepStmt>(gep->getPAGEdge());
144
+ if (gepStmt->isVariantFieldGep())
144
145
  {
145
146
  setObjFieldInsensitive(ptd.get_id());
146
147
  CxtVar var(ptd.get_cond(),getFIObjVar(ptd.get_id()));
147
148
  tmpDstPts.set(var);
148
149
  }
149
- else if (const NormalGepStmt* normalGep = SVFUtil::dyn_cast<NormalGepStmt>(gep->getPAGEdge()))
150
+ else
150
151
  {
151
- CxtVar var(ptd.get_cond(),getGepObjVar(ptd.get_id(),normalGep->getLocationSet()));
152
+ CxtVar var(ptd.get_cond(),getGepObjVar(ptd.get_id(),gepStmt->getLocationSet()));
152
153
  tmpDstPts.set(var);
153
154
  }
154
- else
155
- assert(false && "new gep edge?");
156
155
  }
157
156
  }
158
157
 
@@ -155,8 +155,8 @@ void FunptrDDAClient::performStat(PointerAnalysis* pta)
155
155
  OrderedNodeSet& AliasDDAClient::collectCandidateQueries(SVFIR* pag)
156
156
  {
157
157
  setPAG(pag);
158
- PAGEdge::SVFStmtSetTy& loads = pag->getSVFStmtSet(PAGEdge::Load);
159
- for (PAGEdge::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
158
+ SVFStmt::SVFStmtSetTy& loads = pag->getSVFStmtSet(SVFStmt::Load);
159
+ for (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
160
160
  loads.end(); iter != eiter; ++iter)
161
161
  {
162
162
  PAGNode* loadsrc = (*iter)->getSrcNode();
@@ -164,16 +164,16 @@ OrderedNodeSet& AliasDDAClient::collectCandidateQueries(SVFIR* pag)
164
164
  addCandidate(loadsrc->getId());
165
165
  }
166
166
 
167
- PAGEdge::SVFStmtSetTy& stores = pag->getSVFStmtSet(PAGEdge::Store);
168
- for (PAGEdge::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
167
+ SVFStmt::SVFStmtSetTy& stores = pag->getSVFStmtSet(SVFStmt::Store);
168
+ for (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
169
169
  stores.end(); iter != eiter; ++iter)
170
170
  {
171
171
  PAGNode* storedst = (*iter)->getDstNode();
172
172
  storeDstNodes.insert(storedst);
173
173
  addCandidate(storedst->getId());
174
174
  }
175
- PAGEdge::SVFStmtSetTy& geps = pag->getSVFStmtSet(PAGEdge::NormalGep);
176
- for (PAGEdge::SVFStmtSetTy::iterator iter = geps.begin(), eiter =
175
+ SVFStmt::SVFStmtSetTy& geps = pag->getSVFStmtSet(SVFStmt::Gep);
176
+ for (SVFStmt::SVFStmtSetTy::iterator iter = geps.begin(), eiter =
177
177
  geps.end(); iter != eiter; ++iter)
178
178
  {
179
179
  PAGNode* gepsrc = (*iter)->getSrcNode();
@@ -242,7 +242,7 @@ void DDAStat::performStat()
242
242
  PTNumStatMap["PointsToBlkPtr"] = _NumOfBlackholePtr;
243
243
  PTNumStatMap["NumOfMustAA"] = _TotalNumOfMustAliases;
244
244
  PTNumStatMap["NumOfInfePath"] = _TotalNumOfInfeasiblePath;
245
- PTNumStatMap["NumOfStore"] = SVFIR::getPAG()->getPTASVFStmtSet(PAGEdge::Store).size();
245
+ PTNumStatMap["NumOfStore"] = SVFIR::getPAG()->getPTASVFStmtSet(SVFStmt::Store).size();
246
246
  PTNumStatMap["MemoryUsageVmrss"] = _vmrssUsageAfter - _vmrssUsageBefore;
247
247
  PTNumStatMap["MemoryUsageVmsize"] = _vmsizeUsageAfter - _vmsizeUsageBefore;
248
248
 
@@ -126,18 +126,17 @@ PointsTo FlowDDA::processGepPts(const GepSVFGNode* gep, const PointsTo& srcPts)
126
126
  tmpDstPts.set(ptd);
127
127
  else
128
128
  {
129
- if (SVFUtil::isa<VariantGepStmt>(gep->getPAGEdge()))
129
+ const GepStmt* gepStmt = SVFUtil::cast<GepStmt>(gep->getPAGEdge());
130
+ if (gepStmt->isVariantFieldGep())
130
131
  {
131
132
  setObjFieldInsensitive(ptd);
132
133
  tmpDstPts.set(getFIObjVar(ptd));
133
134
  }
134
- else if (const NormalGepStmt* normalGep = SVFUtil::dyn_cast<NormalGepStmt>(gep->getPAGEdge()))
135
+ else
135
136
  {
136
- NodeID fieldSrcPtdNode = getGepObjVar(ptd, normalGep->getLocationSet());
137
+ NodeID fieldSrcPtdNode = getGepObjVar(ptd, gepStmt->getLocationSet());
137
138
  tmpDstPts.set(fieldSrcPtdNode);
138
139
  }
139
- else
140
- assert(false && "new gep edge?");
141
140
  }
142
141
  }
143
142
  DBOUT(DDDA, outs() << "\t return created gep objs {");
@@ -49,24 +49,24 @@ void ConstraintGraph::buildCG()
49
49
  }
50
50
 
51
51
  // initialize edges
52
- PAGEdge::SVFStmtSetTy& addrs = getPAGEdgeSet(PAGEdge::Addr);
53
- for (PAGEdge::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =
52
+ SVFStmt::SVFStmtSetTy& addrs = getPAGEdgeSet(SVFStmt::Addr);
53
+ for (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =
54
54
  addrs.end(); iter != eiter; ++iter)
55
55
  {
56
56
  const AddrStmt* edge = SVFUtil::cast<AddrStmt>(*iter);
57
57
  addAddrCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
58
58
  }
59
59
 
60
- PAGEdge::SVFStmtSetTy& copys = getPAGEdgeSet(PAGEdge::Copy);
61
- for (PAGEdge::SVFStmtSetTy::iterator iter = copys.begin(), eiter =
60
+ SVFStmt::SVFStmtSetTy& copys = getPAGEdgeSet(SVFStmt::Copy);
61
+ for (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =
62
62
  copys.end(); iter != eiter; ++iter)
63
63
  {
64
64
  const CopyStmt* edge = SVFUtil::cast<CopyStmt>(*iter);
65
65
  addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
66
66
  }
67
67
 
68
- PAGEdge::SVFStmtSetTy& phis = getPAGEdgeSet(PAGEdge::Phi);
69
- for (PAGEdge::SVFStmtSetTy::iterator iter = phis.begin(), eiter =
68
+ SVFStmt::SVFStmtSetTy& phis = getPAGEdgeSet(SVFStmt::Phi);
69
+ for (SVFStmt::SVFStmtSetTy::iterator iter = phis.begin(), eiter =
70
70
  phis.end(); iter != eiter; ++iter)
71
71
  {
72
72
  const PhiStmt* edge = SVFUtil::cast<PhiStmt>(*iter);
@@ -74,64 +74,59 @@ void ConstraintGraph::buildCG()
74
74
  addCopyCGEdge(opVar->getId(),edge->getResID());
75
75
  }
76
76
 
77
- PAGEdge::SVFStmtSetTy& calls = getPAGEdgeSet(PAGEdge::Call);
78
- for (PAGEdge::SVFStmtSetTy::iterator iter = calls.begin(), eiter =
77
+ SVFStmt::SVFStmtSetTy& calls = getPAGEdgeSet(SVFStmt::Call);
78
+ for (SVFStmt::SVFStmtSetTy::iterator iter = calls.begin(), eiter =
79
79
  calls.end(); iter != eiter; ++iter)
80
80
  {
81
81
  const CallPE* edge = SVFUtil::cast<CallPE>(*iter);
82
82
  addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
83
83
  }
84
84
 
85
- PAGEdge::SVFStmtSetTy& rets = getPAGEdgeSet(PAGEdge::Ret);
86
- for (PAGEdge::SVFStmtSetTy::iterator iter = rets.begin(), eiter =
85
+ SVFStmt::SVFStmtSetTy& rets = getPAGEdgeSet(SVFStmt::Ret);
86
+ for (SVFStmt::SVFStmtSetTy::iterator iter = rets.begin(), eiter =
87
87
  rets.end(); iter != eiter; ++iter)
88
88
  {
89
89
  const RetPE* edge = SVFUtil::cast<RetPE>(*iter);
90
90
  addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
91
91
  }
92
92
 
93
- PAGEdge::SVFStmtSetTy& tdfks = getPAGEdgeSet(PAGEdge::ThreadFork);
94
- for (PAGEdge::SVFStmtSetTy::iterator iter = tdfks.begin(), eiter =
93
+ SVFStmt::SVFStmtSetTy& tdfks = getPAGEdgeSet(SVFStmt::ThreadFork);
94
+ for (SVFStmt::SVFStmtSetTy::iterator iter = tdfks.begin(), eiter =
95
95
  tdfks.end(); iter != eiter; ++iter)
96
96
  {
97
97
  const TDForkPE* edge = SVFUtil::cast<TDForkPE>(*iter);
98
98
  addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
99
99
  }
100
100
 
101
- PAGEdge::SVFStmtSetTy& tdjns = getPAGEdgeSet(PAGEdge::ThreadJoin);
102
- for (PAGEdge::SVFStmtSetTy::iterator iter = tdjns.begin(), eiter =
101
+ SVFStmt::SVFStmtSetTy& tdjns = getPAGEdgeSet(SVFStmt::ThreadJoin);
102
+ for (SVFStmt::SVFStmtSetTy::iterator iter = tdjns.begin(), eiter =
103
103
  tdjns.end(); iter != eiter; ++iter)
104
104
  {
105
105
  const TDJoinPE* edge = SVFUtil::cast<TDJoinPE>(*iter);
106
106
  addCopyCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
107
107
  }
108
108
 
109
- PAGEdge::SVFStmtSetTy& ngeps = getPAGEdgeSet(PAGEdge::NormalGep);
110
- for (PAGEdge::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =
109
+ SVFStmt::SVFStmtSetTy& ngeps = getPAGEdgeSet(SVFStmt::Gep);
110
+ for (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =
111
111
  ngeps.end(); iter != eiter; ++iter)
112
112
  {
113
- NormalGepStmt* edge = SVFUtil::cast<NormalGepStmt>(*iter);
114
- addNormalGepCGEdge(edge->getRHSVarID(),edge->getLHSVarID(),edge->getLocationSet());
115
- }
116
-
117
- PAGEdge::SVFStmtSetTy& vgeps = getPAGEdgeSet(PAGEdge::VariantGep);
118
- for (PAGEdge::SVFStmtSetTy::iterator iter = vgeps.begin(), eiter =
119
- vgeps.end(); iter != eiter; ++iter)
120
- {
121
- VariantGepStmt* edge = SVFUtil::cast<VariantGepStmt>(*iter);
122
- addVariantGepCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
113
+ GepStmt* edge = SVFUtil::cast<GepStmt>(*iter);
114
+ if(edge->isVariantFieldGep())
115
+ addVariantGepCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
116
+ else
117
+ addNormalGepCGEdge(edge->getRHSVarID(),edge->getLHSVarID(),edge->getLocationSet());
123
118
  }
124
119
 
125
- PAGEdge::SVFStmtSetTy& loads = getPAGEdgeSet(PAGEdge::Load);
126
- for (PAGEdge::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
120
+ SVFStmt::SVFStmtSetTy& loads = getPAGEdgeSet(SVFStmt::Load);
121
+ for (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
127
122
  loads.end(); iter != eiter; ++iter)
128
123
  {
129
124
  LoadStmt* edge = SVFUtil::cast<LoadStmt>(*iter);
130
125
  addLoadCGEdge(edge->getRHSVarID(),edge->getLHSVarID());
131
126
  }
132
127
 
133
- PAGEdge::SVFStmtSetTy& stores = getPAGEdgeSet(PAGEdge::Store);
134
- for (PAGEdge::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
128
+ SVFStmt::SVFStmtSetTy& stores = getPAGEdgeSet(SVFStmt::Store);
129
+ for (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
135
130
  stores.end(); iter != eiter; ++iter)
136
131
  {
137
132
  StoreStmt* edge = SVFUtil::cast<StoreStmt>(*iter);
@@ -562,7 +557,7 @@ void ConstraintGraph::print()
562
557
  }
563
558
  else if (NormalGepCGEdge* ngep = SVFUtil::dyn_cast<NormalGepCGEdge>(*iter))
564
559
  {
565
- outs() << ngep->getSrcID() << " -- NormalGep (" << ngep->getFieldOffset()
560
+ outs() << ngep->getSrcID() << " -- NormalGep (" << ngep->getConstantFieldIdx()
566
561
  << ") --> " << ngep->getDstID() << "\n";
567
562
  }
568
563
  else if (VariantGepCGEdge* vgep = SVFUtil::dyn_cast<VariantGepCGEdge>(*iter))
@@ -452,6 +452,10 @@ void ICFG::updateCallGraph(PTACallGraph* callgraph)
452
452
  removeICFGEdge(edge);
453
453
  }
454
454
  }
455
+ // dump ICFG
456
+ if (Options::DumpICFG){
457
+ dump("icfg_final");
458
+ }
455
459
  }
456
460
 
457
461
  /*!
@@ -224,8 +224,8 @@ void SVFG::addSVFGNodesForAddrTakenVars()
224
224
  {
225
225
 
226
226
  // set defs for address-taken vars defined at store statements
227
- PAGEdge::SVFStmtSetTy& stores = getPAGEdgeSet(PAGEdge::Store);
228
- for (PAGEdge::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
227
+ SVFStmt::SVFStmtSetTy& stores = getPAGEdgeSet(SVFStmt::Store);
228
+ for (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
229
229
  stores.end(); iter != eiter; ++iter)
230
230
  {
231
231
  StoreStmt* store = SVFUtil::cast<StoreStmt>(*iter);
@@ -336,16 +336,16 @@ void VFG::addVFGNodes()
336
336
  addNullPtrVFGNode(pag->getGNode(pag->getNullPtr()));
337
337
 
338
338
  // initialize address nodes
339
- PAGEdge::SVFStmtSetTy& addrs = getPAGEdgeSet(PAGEdge::Addr);
340
- for (PAGEdge::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =
339
+ SVFStmt::SVFStmtSetTy& addrs = getPAGEdgeSet(SVFStmt::Addr);
340
+ for (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =
341
341
  addrs.end(); iter != eiter; ++iter)
342
342
  {
343
343
  addAddrVFGNode(SVFUtil::cast<AddrStmt>(*iter));
344
344
  }
345
345
 
346
346
  // initialize copy nodes
347
- PAGEdge::SVFStmtSetTy& copys = getPAGEdgeSet(PAGEdge::Copy);
348
- for (PAGEdge::SVFStmtSetTy::iterator iter = copys.begin(), eiter =
347
+ SVFStmt::SVFStmtSetTy& copys = getPAGEdgeSet(SVFStmt::Copy);
348
+ for (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =
349
349
  copys.end(); iter != eiter; ++iter)
350
350
  {
351
351
  const CopyStmt* edge = SVFUtil::cast<CopyStmt>(*iter);
@@ -354,38 +354,31 @@ void VFG::addVFGNodes()
354
354
  }
355
355
 
356
356
  // initialize gep nodes
357
- PAGEdge::SVFStmtSetTy& ngeps = getPAGEdgeSet(PAGEdge::NormalGep);
358
- for (PAGEdge::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =
357
+ SVFStmt::SVFStmtSetTy& ngeps = getPAGEdgeSet(SVFStmt::Gep);
358
+ for (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =
359
359
  ngeps.end(); iter != eiter; ++iter)
360
360
  {
361
- addGepVFGNode(SVFUtil::cast<NormalGepStmt>(*iter));
362
- }
363
-
364
- PAGEdge::SVFStmtSetTy& vgeps = getPAGEdgeSet(PAGEdge::VariantGep);
365
- for (PAGEdge::SVFStmtSetTy::iterator iter = vgeps.begin(), eiter =
366
- vgeps.end(); iter != eiter; ++iter)
367
- {
368
- addGepVFGNode(SVFUtil::cast<VariantGepStmt>(*iter));
361
+ addGepVFGNode(SVFUtil::cast<GepStmt>(*iter));
369
362
  }
370
363
 
371
364
  // initialize load nodes
372
- PAGEdge::SVFStmtSetTy& loads = getPAGEdgeSet(PAGEdge::Load);
373
- for (PAGEdge::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
365
+ SVFStmt::SVFStmtSetTy& loads = getPAGEdgeSet(SVFStmt::Load);
366
+ for (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =
374
367
  loads.end(); iter != eiter; ++iter)
375
368
  {
376
369
  addLoadVFGNode(SVFUtil::cast<LoadStmt>(*iter));
377
370
  }
378
371
 
379
372
  // initialize store nodes
380
- PAGEdge::SVFStmtSetTy& stores = getPAGEdgeSet(PAGEdge::Store);
381
- for (PAGEdge::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
373
+ SVFStmt::SVFStmtSetTy& stores = getPAGEdgeSet(SVFStmt::Store);
374
+ for (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =
382
375
  stores.end(); iter != eiter; ++iter)
383
376
  {
384
377
  addStoreVFGNode(SVFUtil::cast<StoreStmt>(*iter));
385
378
  }
386
379
 
387
- PAGEdge::SVFStmtSetTy& forks = getPAGEdgeSet(PAGEdge::ThreadFork);
388
- for (PAGEdge::SVFStmtSetTy::iterator iter = forks.begin(), eiter =
380
+ SVFStmt::SVFStmtSetTy& forks = getPAGEdgeSet(SVFStmt::ThreadFork);
381
+ for (SVFStmt::SVFStmtSetTy::iterator iter = forks.begin(), eiter =
389
382
  forks.end(); iter != eiter; ++iter)
390
383
  {
391
384
  TDForkPE* forkedge = SVFUtil::cast<TDForkPE>(*iter);
@@ -429,10 +422,10 @@ void VFG::addVFGNodes()
429
422
  continue;
430
423
 
431
424
  CallPESet callPEs;
432
- if (param->hasIncomingEdges(PAGEdge::Call))
425
+ if (param->hasIncomingEdges(SVFStmt::Call))
433
426
  {
434
- for (PAGEdge::SVFStmtSetTy::const_iterator cit = param->getIncomingEdgesBegin(PAGEdge::Call), ecit =
435
- param->getIncomingEdgesEnd(PAGEdge::Call); cit != ecit; ++cit)
427
+ for (SVFStmt::SVFStmtSetTy::const_iterator cit = param->getIncomingEdgesBegin(SVFStmt::Call), ecit =
428
+ param->getIncomingEdgesEnd(SVFStmt::Call); cit != ecit; ++cit)
436
429
  {
437
430
  CallPE* callPE = SVFUtil::cast<CallPE>(*cit);
438
431
  if (isInterestedPAGNode(callPE->getRHSVar()))
@@ -449,10 +442,10 @@ void VFG::addVFGNodes()
449
442
  continue;
450
443
 
451
444
  CallPESet callPEs;
452
- if (varParam->hasIncomingEdges(PAGEdge::Call))
445
+ if (varParam->hasIncomingEdges(SVFStmt::Call))
453
446
  {
454
- for(PAGEdge::SVFStmtSetTy::const_iterator cit = varParam->getIncomingEdgesBegin(PAGEdge::Call),
455
- ecit = varParam->getIncomingEdgesEnd(PAGEdge::Call); cit!=ecit; ++cit)
447
+ for(SVFStmt::SVFStmtSetTy::const_iterator cit = varParam->getIncomingEdgesBegin(SVFStmt::Call),
448
+ ecit = varParam->getIncomingEdgesEnd(SVFStmt::Call); cit!=ecit; ++cit)
456
449
  {
457
450
  CallPE* callPE = SVFUtil::cast<CallPE>(*cit);
458
451
  if(isInterestedPAGNode(callPE->getRHSVar()))
@@ -471,10 +464,10 @@ void VFG::addVFGNodes()
471
464
  const PAGNode* uniqueFunRetNode = it->second;
472
465
 
473
466
  RetPESet retPEs;
474
- if (uniqueFunRetNode->hasOutgoingEdges(PAGEdge::Ret))
467
+ if (uniqueFunRetNode->hasOutgoingEdges(SVFStmt::Ret))
475
468
  {
476
- for (PAGEdge::SVFStmtSetTy::const_iterator cit = uniqueFunRetNode->getOutgoingEdgesBegin(PAGEdge::Ret),
477
- ecit = uniqueFunRetNode->getOutgoingEdgesEnd(PAGEdge::Ret);
469
+ for (SVFStmt::SVFStmtSetTy::const_iterator cit = uniqueFunRetNode->getOutgoingEdgesBegin(SVFStmt::Ret),
470
+ ecit = uniqueFunRetNode->getOutgoingEdgesEnd(SVFStmt::Ret);
478
471
  cit != ecit; ++cit)
479
472
  {
480
473
  const RetPE* retPE = SVFUtil::cast<RetPE>(*cit);
@@ -488,8 +481,8 @@ void VFG::addVFGNodes()
488
481
  }
489
482
 
490
483
  // initialize llvm phi nodes (phi of top level pointers)
491
- PAGEdge::SVFStmtSetTy& phis = getPAGEdgeSet(PAGEdge::Phi);
492
- for (PAGEdge::SVFStmtSetTy::iterator iter = phis.begin(), eiter =
484
+ SVFStmt::SVFStmtSetTy& phis = getPAGEdgeSet(SVFStmt::Phi);
485
+ for (SVFStmt::SVFStmtSetTy::iterator iter = phis.begin(), eiter =
493
486
  phis.end(); iter != eiter; ++iter)
494
487
  {
495
488
  const PhiStmt* edge = SVFUtil::cast<PhiStmt>(*iter);
@@ -497,8 +490,8 @@ void VFG::addVFGNodes()
497
490
  addIntraPHIVFGNode(edge);
498
491
  }
499
492
  // initialize llvm binary nodes (binary operators)
500
- PAGEdge::SVFStmtSetTy& binaryops = getPAGEdgeSet(PAGEdge::BinaryOp);
501
- for (PAGEdge::SVFStmtSetTy::iterator iter = binaryops.begin(), eiter =
493
+ SVFStmt::SVFStmtSetTy& binaryops = getPAGEdgeSet(SVFStmt::BinaryOp);
494
+ for (SVFStmt::SVFStmtSetTy::iterator iter = binaryops.begin(), eiter =
502
495
  binaryops.end(); iter != eiter; ++iter)
503
496
  {
504
497
  const BinaryOPStmt* edge = SVFUtil::cast<BinaryOPStmt>(*iter);
@@ -506,8 +499,8 @@ void VFG::addVFGNodes()
506
499
  addBinaryOPVFGNode(edge);
507
500
  }
508
501
  // initialize llvm unary nodes (unary operators)
509
- PAGEdge::SVFStmtSetTy& unaryops = getPAGEdgeSet(PAGEdge::UnaryOp);
510
- for (PAGEdge::SVFStmtSetTy::iterator iter = unaryops.begin(), eiter =
502
+ SVFStmt::SVFStmtSetTy& unaryops = getPAGEdgeSet(SVFStmt::UnaryOp);
503
+ for (SVFStmt::SVFStmtSetTy::iterator iter = unaryops.begin(), eiter =
511
504
  unaryops.end(); iter != eiter; ++iter)
512
505
  {
513
506
  const UnaryOPStmt* edge = SVFUtil::cast<UnaryOPStmt>(*iter);
@@ -515,8 +508,8 @@ void VFG::addVFGNodes()
515
508
  addUnaryOPVFGNode(edge);
516
509
  }
517
510
  // initialize llvm unary nodes (unary operators)
518
- PAGEdge::SVFStmtSetTy& brs = getPAGEdgeSet(PAGEdge::Branch);
519
- for (PAGEdge::SVFStmtSetTy::iterator iter = brs.begin(), eiter =
511
+ SVFStmt::SVFStmtSetTy& brs = getPAGEdgeSet(SVFStmt::Branch);
512
+ for (SVFStmt::SVFStmtSetTy::iterator iter = brs.begin(), eiter =
520
513
  brs.end(); iter != eiter; ++iter)
521
514
  {
522
515
  const BranchStmt* edge = SVFUtil::cast<BranchStmt>(*iter);
@@ -524,8 +517,8 @@ void VFG::addVFGNodes()
524
517
  addBranchVFGNode(edge);
525
518
  }
526
519
  // initialize llvm cmp nodes (comparision)
527
- PAGEdge::SVFStmtSetTy& cmps = getPAGEdgeSet(PAGEdge::Cmp);
528
- for (PAGEdge::SVFStmtSetTy::iterator iter = cmps.begin(), eiter =
520
+ SVFStmt::SVFStmtSetTy& cmps = getPAGEdgeSet(SVFStmt::Cmp);
521
+ for (SVFStmt::SVFStmtSetTy::iterator iter = cmps.begin(), eiter =
529
522
  cmps.end(); iter != eiter; ++iter)
530
523
  {
531
524
  const CmpStmt* edge = SVFUtil::cast<CmpStmt>(*iter);
@@ -692,8 +685,8 @@ void VFG::connectDirectVFGEdges()
692
685
  /// connect direct value-flow edges (parameter passing) for thread fork/join
693
686
  if(Options::EnableThreadCallGraph){
694
687
  /// add fork edge
695
- PAGEdge::SVFStmtSetTy& forks = getPAGEdgeSet(PAGEdge::ThreadFork);
696
- for (PAGEdge::SVFStmtSetTy::iterator iter = forks.begin(), eiter =
688
+ SVFStmt::SVFStmtSetTy& forks = getPAGEdgeSet(SVFStmt::ThreadFork);
689
+ for (SVFStmt::SVFStmtSetTy::iterator iter = forks.begin(), eiter =
697
690
  forks.end(); iter != eiter; ++iter)
698
691
  {
699
692
  TDForkPE* forkedge = SVFUtil::cast<TDForkPE>(*iter);
@@ -702,8 +695,8 @@ void VFG::connectDirectVFGEdges()
702
695
  addInterEdgeFromAPToFP(acutalParm,formalParm,getCallSiteID(forkedge->getCallSite(), formalParm->getFun()));
703
696
  }
704
697
  /// add join edge
705
- PAGEdge::SVFStmtSetTy& joins = getPAGEdgeSet(PAGEdge::ThreadJoin);
706
- for (PAGEdge::SVFStmtSetTy::iterator iter = joins.begin(), eiter =
698
+ SVFStmt::SVFStmtSetTy& joins = getPAGEdgeSet(SVFStmt::ThreadJoin);
699
+ for (SVFStmt::SVFStmtSetTy::iterator iter = joins.begin(), eiter =
707
700
  joins.end(); iter != eiter; ++iter)
708
701
  {
709
702
  TDJoinPE* joinedge = SVFUtil::cast<TDJoinPE>(*iter);
@@ -43,20 +43,13 @@ SVFG* SVFGBuilder::globalSvfg = nullptr;
43
43
 
44
44
  SVFG* SVFGBuilder::buildPTROnlySVFG(BVDataPTAImpl* pta)
45
45
  {
46
- return build(pta, VFG::PTRONLYSVFG_OPT);
47
- }
48
-
49
- SVFG* SVFGBuilder::buildPTROnlySVFGWithoutOPT(BVDataPTAImpl* pta)
50
- {
51
- return build(pta, VFG::PTRONLYSVFG);
46
+ if(Options::OPTSVFG)
47
+ return build(pta, VFG::PTRONLYSVFG_OPT);
48
+ else
49
+ return build(pta, VFG::PTRONLYSVFG);
52
50
  }
53
51
 
54
52
  SVFG* SVFGBuilder::buildFullSVFG(BVDataPTAImpl* pta)
55
- {
56
- return build(pta, VFG::FULLSVFG_OPT);
57
- }
58
-
59
- SVFG* SVFGBuilder::buildFullSVFGWithoutOPT(BVDataPTAImpl* pta)
60
53
  {
61
54
  return build(pta, VFG::FULLSVFG);
62
55
  }
@@ -122,8 +122,8 @@ void MTAAnnotator::pruneThreadLocal(PointerAnalysis* pta)
122
122
  PointsTo worklist;
123
123
 
124
124
  /// find fork arguments' objects
125
- const PAGEdge::SVFStmtSetTy& forkedges = pag->getPTASVFStmtSet(PAGEdge::ThreadFork);
126
- for (PAGEdge::SVFStmtSetTy::const_iterator it = forkedges.begin(), eit = forkedges.end(); it != eit; ++it)
125
+ const SVFStmt::SVFStmtSetTy& forkedges = pag->getPTASVFStmtSet(SVFStmt::ThreadFork);
126
+ for (SVFStmt::SVFStmtSetTy::const_iterator it = forkedges.begin(), eit = forkedges.end(); it != eit; ++it)
127
127
  {
128
128
  PAGEdge* edge = *it;
129
129
  worklist |= pta->getPts(edge->getDstID());
@@ -135,7 +135,7 @@ void MTAAnnotator::pruneThreadLocal(PointerAnalysis* pta)
135
135
  for (SVFIR::SVFStmtSet::const_iterator it = globaledges.begin(), eit = globaledges.end(); it != eit; ++it)
136
136
  {
137
137
  const PAGEdge* edge = *it;
138
- if (edge->getEdgeKind() == PAGEdge::Addr)
138
+ if (edge->getEdgeKind() == SVFStmt::Addr)
139
139
  {
140
140
  worklist.set(edge->getSrcID());
141
141
  }