svf-tools 1.0.351 → 1.0.352

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 (280) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +2 -2
  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 +21 -21
  10. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +10 -8
  11. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
  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 +4 -4
  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 +1 -1
  18. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
  19. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +4 -2
  20. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  21. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +2 -2
  23. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +24 -22
  24. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +17 -17
  25. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +15 -14
  26. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +11 -11
  27. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +3 -3
  28. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
  29. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +4 -4
  30. package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
  32. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +2 -2
  33. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +4 -4
  34. package/SVF-doxygen/html/html/MemRegion_8h_source.html +2 -2
  35. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  36. package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
  37. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
  38. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +3 -4
  39. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
  40. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  41. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
  42. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +8 -8
  43. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  44. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +6 -6
  45. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +19 -21
  46. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +38 -40
  47. package/SVF-doxygen/html/html/SVFIR_8h_source.html +35 -37
  48. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +21 -23
  49. package/SVF-doxygen/html/html/SVFStatements_8h.html +0 -4
  50. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +146 -156
  51. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  52. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +98 -98
  53. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  54. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
  55. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  56. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +10 -10
  57. package/SVF-doxygen/html/html/VFGNode_8h_source.html +13 -13
  58. package/SVF-doxygen/html/html/VFG_8cpp_source.html +50 -51
  59. package/SVF-doxygen/html/html/VFG_8h_source.html +35 -35
  60. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  61. package/SVF-doxygen/html/html/annotated.html +100 -102
  62. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
  63. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +24 -25
  64. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +17 -18
  65. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
  66. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +5 -5
  68. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +3 -3
  69. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +4 -4
  70. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
  71. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt-members.html +28 -29
  72. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +25 -30
  73. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.png +0 -0
  74. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +4 -4
  75. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +28 -29
  76. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +23 -24
  77. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -2
  78. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +31 -32
  79. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +38 -39
  80. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
  81. package/SVF-doxygen/html/html/classSVF_1_1CSC.html +2 -2
  82. package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +27 -28
  83. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +24 -25
  84. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +11 -11
  85. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +12 -12
  86. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +1 -1
  87. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +15 -15
  88. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +30 -31
  89. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +24 -25
  90. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -2
  91. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph-members.html +1 -1
  92. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +95 -96
  93. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
  94. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
  95. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +17 -16
  96. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +24 -25
  97. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +17 -18
  98. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +4 -4
  99. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +5 -5
  100. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
  101. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
  102. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
  103. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +2 -2
  104. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  105. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +13 -13
  106. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +13 -13
  107. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +14 -14
  108. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +6 -5
  109. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +36 -36
  110. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +4 -4
  111. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +56 -55
  112. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +21 -20
  113. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  114. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +1 -1
  115. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +39 -39
  116. package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +16 -14
  117. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +139 -50
  118. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.png +0 -0
  119. package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +2 -2
  120. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +39 -39
  121. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +7 -8
  122. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +1 -1
  123. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
  124. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +2 -2
  125. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +27 -28
  126. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +17 -18
  127. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +6 -6
  128. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
  129. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
  130. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
  131. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
  132. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +1 -1
  133. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +33 -34
  134. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +32 -33
  135. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +5 -5
  136. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +6 -6
  137. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
  138. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +18 -18
  139. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG-members.html +1 -1
  140. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
  141. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +4 -4
  142. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -2
  143. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +5 -6
  144. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +30 -31
  145. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +23 -24
  146. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
  147. package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +27 -28
  148. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +24 -25
  149. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +13 -13
  150. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +16 -16
  152. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +1 -1
  153. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +2 -2
  154. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +10 -10
  155. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +1 -1
  156. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +2 -2
  157. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +77 -78
  158. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +3 -3
  159. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +29 -29
  160. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +24 -25
  161. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +49 -53
  162. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
  163. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +3 -3
  164. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +3 -3
  165. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +3 -3
  166. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +24 -25
  167. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +18 -19
  168. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +26 -27
  169. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +18 -19
  170. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +26 -27
  171. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +18 -19
  172. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
  173. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +17 -17
  174. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt-members.html +29 -30
  175. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +30 -31
  176. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +2 -2
  177. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +79 -80
  178. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +11 -11
  179. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +13 -13
  180. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +2 -2
  182. package/SVF-doxygen/html/html/classes.html +95 -93
  183. package/SVF-doxygen/html/html/functions_a.html +5 -5
  184. package/SVF-doxygen/html/html/functions_c.html +22 -22
  185. package/SVF-doxygen/html/html/functions_eval_g.html +2 -1
  186. package/SVF-doxygen/html/html/functions_eval_n.html +0 -1
  187. package/SVF-doxygen/html/html/functions_eval_v.html +0 -1
  188. package/SVF-doxygen/html/html/functions_func.html +5 -5
  189. package/SVF-doxygen/html/html/functions_func_c.html +20 -22
  190. package/SVF-doxygen/html/html/functions_func_g.html +13 -13
  191. package/SVF-doxygen/html/html/functions_func_i.html +7 -4
  192. package/SVF-doxygen/html/html/functions_func_n.html +0 -3
  193. package/SVF-doxygen/html/html/functions_func_o.html +3 -5
  194. package/SVF-doxygen/html/html/functions_func_t.html +0 -2
  195. package/SVF-doxygen/html/html/functions_func_v.html +0 -3
  196. package/SVF-doxygen/html/html/functions_g.html +17 -16
  197. package/SVF-doxygen/html/html/functions_i.html +9 -6
  198. package/SVF-doxygen/html/html/functions_l.html +3 -3
  199. package/SVF-doxygen/html/html/functions_m.html +1 -1
  200. package/SVF-doxygen/html/html/functions_n.html +0 -4
  201. package/SVF-doxygen/html/html/functions_o.html +3 -5
  202. package/SVF-doxygen/html/html/functions_p.html +10 -10
  203. package/SVF-doxygen/html/html/functions_r.html +8 -4
  204. package/SVF-doxygen/html/html/functions_s.html +12 -10
  205. package/SVF-doxygen/html/html/functions_t.html +7 -9
  206. package/SVF-doxygen/html/html/functions_v.html +4 -5
  207. package/SVF-doxygen/html/html/functions_vars_v.html +3 -0
  208. package/SVF-doxygen/html/html/functions_w.html +5 -9
  209. package/SVF-doxygen/html/html/hierarchy.html +55 -57
  210. package/SVF-doxygen/html/html/namespaceSVF.html +0 -4
  211. package/SVF-doxygen/html/html/search/all_1.js +5 -5
  212. package/SVF-doxygen/html/html/search/all_10.js +8 -8
  213. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  214. package/SVF-doxygen/html/html/search/all_13.js +9 -9
  215. package/SVF-doxygen/html/html/search/all_14.js +5 -5
  216. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  217. package/SVF-doxygen/html/html/search/all_16.js +3 -3
  218. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  219. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  220. package/SVF-doxygen/html/html/search/all_7.js +4 -4
  221. package/SVF-doxygen/html/html/search/all_9.js +2 -1
  222. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  223. package/SVF-doxygen/html/html/search/all_d.js +3 -3
  224. package/SVF-doxygen/html/html/search/all_e.js +3 -4
  225. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  226. package/SVF-doxygen/html/html/search/classes_12.js +0 -1
  227. package/SVF-doxygen/html/html/search/classes_b.js +0 -1
  228. package/SVF-doxygen/html/html/search/enumvalues_12.js +1 -1
  229. package/SVF-doxygen/html/html/search/enumvalues_6.js +1 -1
  230. package/SVF-doxygen/html/html/search/enumvalues_b.js +1 -1
  231. package/SVF-doxygen/html/html/search/functions_0.js +5 -5
  232. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  233. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  234. package/SVF-doxygen/html/html/search/functions_13.js +0 -1
  235. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  236. package/SVF-doxygen/html/html/search/functions_6.js +3 -3
  237. package/SVF-doxygen/html/html/search/functions_8.js +2 -1
  238. package/SVF-doxygen/html/html/search/functions_c.js +0 -1
  239. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  240. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  241. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  242. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  243. package/SVF-doxygen/html/html/search/variables_16.js +1 -0
  244. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  245. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
  246. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  247. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
  248. package/include/Graphs/ConsG.h +2 -2
  249. package/include/Graphs/ConsGEdge.h +1 -1
  250. package/include/Graphs/VFG.h +2 -2
  251. package/include/MemoryModel/SVFIR.h +2 -2
  252. package/include/MemoryModel/SVFStatements.h +17 -94
  253. package/include/MemoryModel/SVFVariables.h +9 -6
  254. package/include/SVF-FE/DCHG.h +1 -1
  255. package/include/SVF-FE/SVFIRBuilder.h +5 -5
  256. package/include/Util/IRAnnotator.h +1 -1
  257. package/lib/DDA/ContextDDA.cpp +4 -5
  258. package/lib/DDA/DDAClient.cpp +6 -6
  259. package/lib/DDA/DDAStat.cpp +1 -1
  260. package/lib/DDA/FlowDDA.cpp +4 -5
  261. package/lib/Graphs/ConsG.cpp +26 -31
  262. package/lib/Graphs/SVFG.cpp +2 -2
  263. package/lib/Graphs/VFG.cpp +36 -43
  264. package/lib/MTA/MTAAnnotator.cpp +3 -3
  265. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  266. package/lib/MemoryModel/SVFIR.cpp +26 -34
  267. package/lib/MemoryModel/SVFStatements.cpp +0 -22
  268. package/lib/MemoryModel/SVFVariables.cpp +1 -1
  269. package/lib/MemoryModel/SymbolTableInfo.cpp +1 -1
  270. package/lib/SVF-FE/DCHG.cpp +1 -1
  271. package/lib/SVF-FE/Graph2Json.cpp +24 -27
  272. package/lib/Util/PTAStat.cpp +9 -9
  273. package/lib/Util/TypeBasedHeapCloning.cpp +5 -5
  274. package/lib/WPA/AndersenSFR.cpp +2 -2
  275. package/lib/WPA/AndersenStat.cpp +2 -2
  276. package/lib/WPA/CSC.cpp +2 -2
  277. package/lib/WPA/FlowSensitive.cpp +4 -7
  278. package/lib/WPA/FlowSensitiveStat.cpp +2 -2
  279. package/lib/WPA/FlowSensitiveTBHC.cpp +6 -9
  280. package/package.json +1 -1
@@ -53,7 +53,7 @@ public:
53
53
  /// ThreadFork/ThreadJoin is to model parameter passings between thread spawners and spawnees.
54
54
  enum PEDGEK
55
55
  {
56
- Addr, Copy, Store, Load, Call, Ret, NormalGep, VariantGep, Phi, Cmp, BinaryOp, UnaryOp, Branch, ThreadFork, ThreadJoin
56
+ Addr, Copy, Store, Load, Call, Ret, Gep, Phi, Cmp, BinaryOp, UnaryOp, Branch, ThreadFork, ThreadJoin
57
57
  };
58
58
 
59
59
  private:
@@ -85,8 +85,7 @@ public:
85
85
  edge->getEdgeKind() == SVFStmt::Load ||
86
86
  edge->getEdgeKind() == SVFStmt::Call ||
87
87
  edge->getEdgeKind() == SVFStmt::Ret ||
88
- edge->getEdgeKind() == SVFStmt::NormalGep ||
89
- edge->getEdgeKind() == SVFStmt::VariantGep ||
88
+ edge->getEdgeKind() == SVFStmt::Gep ||
90
89
  edge->getEdgeKind() == SVFStmt::Cmp ||
91
90
  edge->getEdgeKind() == SVFStmt::BinaryOp ||
92
91
  edge->getEdgeKind() == SVFStmt::UnaryOp ||
@@ -227,8 +226,7 @@ public:
227
226
  edge->getEdgeKind() == SVFStmt::Load ||
228
227
  edge->getEdgeKind() == SVFStmt::Call ||
229
228
  edge->getEdgeKind() == SVFStmt::Ret ||
230
- edge->getEdgeKind() == SVFStmt::NormalGep ||
231
- edge->getEdgeKind() == SVFStmt::VariantGep ||
229
+ edge->getEdgeKind() == SVFStmt::Gep ||
232
230
  edge->getEdgeKind() == SVFStmt::ThreadFork ||
233
231
  edge->getEdgeKind() == SVFStmt::ThreadJoin;
234
232
  }
@@ -240,8 +238,7 @@ public:
240
238
  edge->getEdgeKind() == SVFStmt::Load ||
241
239
  edge->getEdgeKind() == SVFStmt::Call ||
242
240
  edge->getEdgeKind() == SVFStmt::Ret ||
243
- edge->getEdgeKind() == SVFStmt::NormalGep ||
244
- edge->getEdgeKind() == SVFStmt::VariantGep ||
241
+ edge->getEdgeKind() == SVFStmt::Gep ||
245
242
  edge->getEdgeKind() == SVFStmt::ThreadFork ||
246
243
  edge->getEdgeKind() == SVFStmt::ThreadJoin;
247
244
  }
@@ -417,7 +414,7 @@ private:
417
414
  void operator=(const GepStmt &); ///< place holder
418
415
 
419
416
  LocationSet ls; ///< location set of the gep edge
420
-
417
+ bool variantField; ///< Gep statement with a variant field index (pointer arithmetic) for struct field access (e.g., p = &(q + f), where f is a variable)
421
418
  public:
422
419
  /// Methods for support type inquiry through isa, cast, and dyn_cast:
423
420
  //@{
@@ -427,111 +424,37 @@ public:
427
424
  }
428
425
  static inline bool classof(const SVFStmt *edge)
429
426
  {
430
- return edge->getEdgeKind() == SVFStmt::NormalGep ||
431
- edge->getEdgeKind() == SVFStmt::VariantGep;
427
+ return edge->getEdgeKind() == SVFStmt::Gep;
432
428
  }
433
429
  static inline bool classof(const GenericPAGEdgeTy *edge)
434
430
  {
435
- return edge->getEdgeKind() == SVFStmt::NormalGep ||
436
- edge->getEdgeKind() == SVFStmt::VariantGep;
431
+ return edge->getEdgeKind() == SVFStmt::Gep;
437
432
  }
438
433
  //@}
439
434
 
440
435
  inline const LocationSet& getLocationSet() const
441
436
  {
437
+ assert(isVariantFieldGep()==false && "Can't retrieve the LocationSet if using a variable field index (pointer arithmetic) for struct field access ");
442
438
  return ls;
443
439
  }
444
440
 
445
- protected:
446
- /// constructor
447
- GepStmt(SVFVar* s, SVFVar* d, const LocationSet& l, PEDGEK k) : AssignStmt(s,d,k), ls(l)
448
- {
449
- }
450
-
451
- virtual const std::string toString() const;
452
-
453
- };
454
-
455
-
456
- /*!
457
- * Gep statement with a fixed field index for struct field access
458
- */
459
- class NormalGepStmt : public GepStmt
460
- {
461
- private:
462
- NormalGepStmt(); ///< place holder
463
- NormalGepStmt(const NormalGepStmt&); ///< place holder
464
- void operator=(const NormalGepStmt&); ///< place holder
465
-
466
- public:
467
- /// Methods for support type inquiry through isa, cast, and dyn_cast:
468
- //@{
469
- static inline bool classof(const NormalGepStmt *)
441
+ /// offset of the gep statement
442
+ inline s64_t getConstantFieldIdx() const
470
443
  {
471
- return true;
472
- }
473
- static inline bool classof(const GepStmt *edge)
474
- {
475
- return edge->getEdgeKind() == SVFStmt::NormalGep;
476
- }
477
- static inline bool classof(const SVFStmt *edge)
478
- {
479
- return edge->getEdgeKind() == SVFStmt::NormalGep;
444
+ return getLocationSet().accumulateConstantFieldIdx();
480
445
  }
481
- static inline bool classof(const GenericPAGEdgeTy *edge)
446
+ /// Gep statement with a variant field index (pointer arithmetic) for struct field access
447
+ inline bool isVariantFieldGep() const
482
448
  {
483
- return edge->getEdgeKind() == SVFStmt::NormalGep;
484
- }
485
- //@}
449
+ return variantField;
450
+ }
486
451
 
487
452
  /// constructor
488
- NormalGepStmt(SVFVar* s, SVFVar* d, const LocationSet& l) : GepStmt(s,d,l, SVFStmt::NormalGep)
489
- {}
490
-
491
- /// offset of the gep edge
492
- inline s64_t getFieldOffset() const
453
+ GepStmt(SVFVar* s, SVFVar* d, const LocationSet& l, bool varfld=false) : AssignStmt(s,d,SVFStmt::Gep), ls(l), variantField(varfld)
493
454
  {
494
- return getLocationSet().accumulateConstantFieldIdx();
495
455
  }
496
456
 
497
- virtual const std::string toString() const override;
498
- };
499
-
500
- /*!
501
- * Gep statement with a variant field index for struct field access
502
- */
503
- class VariantGepStmt : public GepStmt
504
- {
505
- private:
506
- VariantGepStmt(); ///< place holder
507
- VariantGepStmt(const VariantGepStmt&); ///< place holder
508
- void operator=(const VariantGepStmt&); ///< place holder
509
-
510
- public:
511
- /// Methods for support type inquiry through isa, cast, and dyn_cast:
512
- //@{
513
- static inline bool classof(const VariantGepStmt *)
514
- {
515
- return true;
516
- }
517
- static inline bool classof(const GepStmt *edge)
518
- {
519
- return edge->getEdgeKind() == SVFStmt::VariantGep;
520
- }
521
- static inline bool classof(const SVFStmt *edge)
522
- {
523
- return edge->getEdgeKind() == SVFStmt::VariantGep;
524
- }
525
- static inline bool classof(const GenericPAGEdgeTy *edge)
526
- {
527
- return edge->getEdgeKind() == SVFStmt::VariantGep;
528
- }
529
- //@}
530
-
531
- /// constructor
532
- VariantGepStmt(SVFVar* s, SVFVar* d, const LocationSet& l) : GepStmt(s,d,l, SVFStmt::VariantGep) {}
533
-
534
- virtual const std::string toString() const override;
457
+ virtual const std::string toString() const;
535
458
 
536
459
  };
537
460
 
@@ -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
  }
@@ -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
 
@@ -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))
@@ -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);