svf-tools 1.0.317 → 1.0.321

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 (547) hide show
  1. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +6 -6
  2. package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -1
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +4 -4
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
  5. package/SVF-doxygen/html/html/CHGBuilder_8cpp.html +138 -0
  6. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +178 -0
  7. package/SVF-doxygen/html/html/CHGBuilder_8h.html +95 -0
  8. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +109 -0
  9. package/SVF-doxygen/html/html/CHG_8cpp.html +10 -64
  10. package/SVF-doxygen/html/html/CHG_8cpp_source.html +31 -108
  11. package/SVF-doxygen/html/html/CHG_8h.html +9 -3
  12. package/SVF-doxygen/html/html/CHG_8h_source.html +82 -76
  13. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +37 -33
  14. package/SVF-doxygen/html/html/ConsG_8h_source.html +32 -32
  15. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  16. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
  17. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/html/DCHG_8h.html +1 -1
  19. package/SVF-doxygen/html/html/DCHG_8h_source.html +8 -8
  20. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
  21. package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
  22. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
  23. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
  24. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +12 -12
  25. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
  27. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +22 -22
  28. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  30. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
  31. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +4 -4
  32. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +7 -7
  33. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
  34. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +3 -3
  35. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +16 -16
  36. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +6 -6
  37. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  38. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +3 -3
  39. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
  40. package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +1 -1
  41. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
  42. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  43. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
  44. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +20 -21
  45. package/SVF-doxygen/html/html/IRGraph_8h_source.html +37 -40
  46. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +4 -4
  47. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
  48. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +6 -6
  49. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +18 -18
  51. package/SVF-doxygen/html/html/MemRegion_8h_source.html +2 -2
  52. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  53. package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
  54. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
  55. package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +1 -1
  56. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
  57. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  59. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +11 -11
  60. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +13 -13
  61. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +5 -5
  62. package/SVF-doxygen/html/html/PointerAnalysis_8cpp.html +1 -2
  63. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +30 -33
  64. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +31 -31
  65. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
  66. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  67. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +1 -1
  68. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +9 -9
  69. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +48 -48
  70. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +36 -36
  71. package/SVF-doxygen/html/html/SVFG_8h_source.html +25 -25
  72. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp.html +0 -1
  73. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -6
  74. package/SVF-doxygen/html/html/SVFIRBuilder_8h.html +1 -7
  75. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +90 -85
  76. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +70 -62
  77. package/SVF-doxygen/html/html/SVFIR_8h_source.html +168 -182
  78. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +39 -23
  79. package/SVF-doxygen/html/html/SVFStatements_8h.html +6 -0
  80. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +146 -94
  81. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +2 -2
  82. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  83. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +5 -5
  84. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +1 -1
  85. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  87. package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
  88. package/SVF-doxygen/html/html/TCT_8h_source.html +1 -1
  89. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  90. package/SVF-doxygen/html/html/TypeAnalysis_8cpp.html +1 -1
  91. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +9 -9
  92. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
  93. package/SVF-doxygen/html/html/VFGEdge_8h_source.html +1 -1
  94. package/SVF-doxygen/html/html/VFGNode_8h.html +2 -0
  95. package/SVF-doxygen/html/html/VFGNode_8h_source.html +143 -126
  96. package/SVF-doxygen/html/html/VFG_8cpp_source.html +136 -129
  97. package/SVF-doxygen/html/html/VFG_8h_source.html +144 -133
  98. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +6 -6
  99. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
  100. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
  101. package/SVF-doxygen/html/html/annotated.html +265 -261
  102. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +75 -74
  103. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +10 -9
  104. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +75 -74
  105. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +10 -9
  106. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +73 -72
  107. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +31 -30
  108. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +75 -74
  109. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +35 -34
  110. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge-members.html +1 -1
  111. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +5 -5
  112. package/SVF-doxygen/html/html/classSVF_1_1AddrPE-members.html +42 -39
  113. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +27 -22
  114. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +77 -76
  115. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +23 -22
  116. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
  117. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +18 -18
  118. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +8 -8
  119. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  120. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +6 -6
  121. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode-members.html +69 -68
  122. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +30 -29
  123. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +20 -20
  124. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE-members.html +49 -28
  125. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +295 -34
  126. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.png +0 -0
  127. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode-members.html +76 -75
  128. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +12 -11
  129. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +70 -22
  130. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +633 -89
  131. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.png +0 -0
  132. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +164 -0
  133. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +694 -0
  134. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.png +0 -0
  135. package/SVF-doxygen/html/html/classSVF_1_1CHEdge-members.html +1 -1
  136. package/SVF-doxygen/html/html/classSVF_1_1CHEdge.html +15 -15
  137. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder-members.html +100 -0
  138. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +777 -0
  139. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +31 -46
  140. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +103 -651
  141. package/SVF-doxygen/html/html/classSVF_1_1CHNode.html +54 -54
  142. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge-members.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +2 -2
  144. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge-members.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +4 -4
  146. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge-members.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
  148. package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +48 -45
  149. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +33 -28
  150. package/SVF-doxygen/html/html/classSVF_1_1CmpPE-members.html +49 -28
  151. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +295 -34
  152. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.png +0 -0
  153. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode-members.html +79 -78
  154. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +13 -12
  155. package/SVF-doxygen/html/html/classSVF_1_1CommonCHGraph.html +11 -11
  156. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +6 -6
  157. package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge-members.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge.html +2 -2
  159. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +90 -86
  160. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +7 -7
  161. package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge-members.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge.html +2 -2
  163. package/SVF-doxygen/html/html/classSVF_1_1CopyPE-members.html +45 -42
  164. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +27 -22
  165. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +80 -79
  166. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +11 -10
  167. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +1 -1
  168. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +2 -2
  169. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +6 -6
  170. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
  171. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +7 -7
  172. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
  173. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +14 -14
  174. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge-members.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +4 -4
  176. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode-members.html +72 -71
  177. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +10 -9
  178. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +22 -22
  179. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +5 -5
  181. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +22 -22
  182. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +9 -9
  183. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +14 -14
  184. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +76 -75
  185. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +10 -9
  186. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +76 -75
  187. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +10 -9
  188. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode-members.html +76 -75
  189. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +38 -37
  190. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode-members.html +79 -78
  191. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +38 -37
  192. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +4 -4
  193. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge-members.html +1 -1
  194. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +11 -11
  195. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.png +0 -0
  196. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +8 -7
  197. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  198. package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge-members.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge.html +2 -2
  200. package/SVF-doxygen/html/html/classSVF_1_1GepPE-members.html +45 -42
  201. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +22 -17
  202. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +80 -79
  203. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +23 -22
  204. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +1 -1
  205. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +2 -2
  206. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge-members.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +2 -2
  208. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +4 -4
  209. package/SVF-doxygen/html/html/classSVF_1_1IRGraph-members.html +36 -37
  210. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +149 -163
  211. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge-members.html +1 -1
  212. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
  213. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +88 -87
  214. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +10 -9
  215. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +86 -85
  216. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +46 -45
  217. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +2 -2
  219. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge-members.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +4 -4
  221. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge-members.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
  223. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +85 -84
  224. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +10 -9
  225. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode-members.html +84 -83
  226. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +33 -32
  227. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
  228. package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge-members.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge.html +2 -2
  230. package/SVF-doxygen/html/html/classSVF_1_1LoadPE-members.html +45 -42
  231. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +27 -22
  232. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +80 -79
  233. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +11 -10
  234. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
  235. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +70 -69
  236. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +10 -9
  237. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +81 -80
  238. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +10 -9
  239. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  240. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +6 -6
  241. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +2 -2
  242. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +9 -9
  243. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +143 -0
  244. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +669 -0
  245. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.png +0 -0
  246. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +1 -1
  247. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +2 -2
  248. package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE-members.html +47 -44
  249. package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +34 -29
  250. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode-members.html +66 -65
  251. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +37 -36
  252. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
  253. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +17 -16
  254. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode-members.html +77 -76
  255. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +44 -43
  256. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +1 -1
  257. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +2 -2
  258. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +11 -11
  259. package/SVF-doxygen/html/html/classSVF_1_1PhiPE-members.html +153 -0
  260. package/SVF-doxygen/html/html/classSVF_1_1PhiPE.html +717 -0
  261. package/SVF-doxygen/html/html/classSVF_1_1PhiPE.png +0 -0
  262. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +77 -79
  263. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +2 -2
  264. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge-members.html +1 -1
  265. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +2 -2
  266. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge-members.html +1 -1
  267. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +4 -4
  268. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge-members.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
  270. package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +48 -45
  271. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +33 -28
  272. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +90 -86
  273. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +81 -71
  274. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +16 -16
  275. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +105 -101
  276. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +149 -138
  277. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +106 -119
  278. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +621 -1090
  279. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +14 -12
  280. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +401 -288
  281. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +41 -35
  282. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +174 -37
  283. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
  284. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +1 -1
  285. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +14 -14
  286. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +2 -2
  287. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +76 -75
  288. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +14 -13
  289. package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge-members.html +1 -1
  290. package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge.html +2 -2
  291. package/SVF-doxygen/html/html/classSVF_1_1StorePE-members.html +45 -42
  292. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +27 -22
  293. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +80 -79
  294. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +11 -10
  295. package/SVF-doxygen/html/html/classSVF_1_1TCTEdge-members.html +1 -1
  296. package/SVF-doxygen/html/html/classSVF_1_1TCTEdge.html +2 -2
  297. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +49 -46
  298. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +22 -17
  299. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +49 -46
  300. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +22 -17
  301. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
  302. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +1 -1
  303. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +2 -2
  304. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +1 -1
  305. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +2 -2
  306. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge-members.html +1 -1
  307. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
  308. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +12 -12
  309. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +9 -9
  310. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE-members.html +56 -43
  311. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +329 -30
  312. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode-members.html +34 -32
  313. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +63 -30
  314. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +52 -48
  315. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +515 -441
  316. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge-members.html +1 -1
  317. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +4 -4
  318. package/SVF-doxygen/html/html/classSVF_1_1VFGNode-members.html +65 -64
  319. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +22 -18
  320. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.png +0 -0
  321. package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge-members.html +1 -1
  322. package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge.html +2 -2
  323. package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE-members.html +47 -44
  324. package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +28 -23
  325. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +11 -11
  326. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +7 -7
  327. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +8 -8
  328. package/SVF-doxygen/html/html/classes.html +95 -94
  329. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  330. package/SVF-doxygen/html/html/dir_1870ebf480d659cc38d2dd7ac3aa8993.html +2 -2
  331. package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
  332. package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -3
  333. package/SVF-doxygen/html/html/dir_fa02919a30fec2d2c2d591b4d920d648.html +2 -2
  334. package/SVF-doxygen/html/html/files.html +18 -19
  335. package/SVF-doxygen/html/html/functions_0x7e.html +0 -3
  336. package/SVF-doxygen/html/html/functions_a.html +35 -36
  337. package/SVF-doxygen/html/html/functions_b.html +24 -17
  338. package/SVF-doxygen/html/html/functions_c.html +44 -43
  339. package/SVF-doxygen/html/html/functions_d.html +0 -3
  340. package/SVF-doxygen/html/html/functions_e.html +7 -9
  341. package/SVF-doxygen/html/html/functions_eval_b.html +4 -0
  342. package/SVF-doxygen/html/html/functions_eval_p.html +3 -0
  343. package/SVF-doxygen/html/html/functions_f.html +6 -15
  344. package/SVF-doxygen/html/html/functions_func.html +40 -38
  345. package/SVF-doxygen/html/html/functions_func_0x7e.html +0 -3
  346. package/SVF-doxygen/html/html/functions_func_b.html +14 -8
  347. package/SVF-doxygen/html/html/functions_func_c.html +32 -28
  348. package/SVF-doxygen/html/html/functions_func_d.html +0 -3
  349. package/SVF-doxygen/html/html/functions_func_e.html +0 -3
  350. package/SVF-doxygen/html/html/functions_func_g.html +92 -60
  351. package/SVF-doxygen/html/html/functions_func_h.html +3 -9
  352. package/SVF-doxygen/html/html/functions_func_i.html +12 -16
  353. package/SVF-doxygen/html/html/functions_func_m.html +6 -0
  354. package/SVF-doxygen/html/html/functions_func_o.html +11 -4
  355. package/SVF-doxygen/html/html/functions_func_p.html +6 -6
  356. package/SVF-doxygen/html/html/functions_func_r.html +3 -4
  357. package/SVF-doxygen/html/html/functions_func_s.html +6 -9
  358. package/SVF-doxygen/html/html/functions_func_t.html +14 -11
  359. package/SVF-doxygen/html/html/functions_g.html +91 -59
  360. package/SVF-doxygen/html/html/functions_h.html +2 -11
  361. package/SVF-doxygen/html/html/functions_i.html +12 -16
  362. package/SVF-doxygen/html/html/functions_l.html +6 -6
  363. package/SVF-doxygen/html/html/functions_m.html +9 -0
  364. package/SVF-doxygen/html/html/functions_n.html +6 -6
  365. package/SVF-doxygen/html/html/functions_o.html +31 -16
  366. package/SVF-doxygen/html/html/functions_p.html +23 -18
  367. package/SVF-doxygen/html/html/functions_r.html +4 -8
  368. package/SVF-doxygen/html/html/functions_rela.html +3 -0
  369. package/SVF-doxygen/html/html/functions_s.html +14 -16
  370. package/SVF-doxygen/html/html/functions_t.html +18 -15
  371. package/SVF-doxygen/html/html/functions_type_b.html +0 -6
  372. package/SVF-doxygen/html/html/functions_type_c.html +2 -7
  373. package/SVF-doxygen/html/html/functions_type_o.html +3 -0
  374. package/SVF-doxygen/html/html/functions_type_p.html +4 -1
  375. package/SVF-doxygen/html/html/functions_type_u.html +0 -6
  376. package/SVF-doxygen/html/html/functions_type_v.html +3 -0
  377. package/SVF-doxygen/html/html/functions_type_w.html +1 -0
  378. package/SVF-doxygen/html/html/functions_u.html +4 -13
  379. package/SVF-doxygen/html/html/functions_v.html +8 -5
  380. package/SVF-doxygen/html/html/functions_vars_a.html +0 -3
  381. package/SVF-doxygen/html/html/functions_vars_b.html +6 -3
  382. package/SVF-doxygen/html/html/functions_vars_c.html +5 -4
  383. package/SVF-doxygen/html/html/functions_vars_e.html +1 -2
  384. package/SVF-doxygen/html/html/functions_vars_f.html +0 -9
  385. package/SVF-doxygen/html/html/functions_vars_h.html +0 -3
  386. package/SVF-doxygen/html/html/functions_vars_m.html +3 -0
  387. package/SVF-doxygen/html/html/functions_vars_o.html +8 -3
  388. package/SVF-doxygen/html/html/functions_vars_p.html +3 -0
  389. package/SVF-doxygen/html/html/functions_vars_r.html +0 -3
  390. package/SVF-doxygen/html/html/functions_vars_s.html +3 -0
  391. package/SVF-doxygen/html/html/functions_vars_u.html +0 -3
  392. package/SVF-doxygen/html/html/functions_vars_v.html +3 -3
  393. package/SVF-doxygen/html/html/functions_w.html +9 -4
  394. package/SVF-doxygen/html/html/globals_d.html +0 -4
  395. package/SVF-doxygen/html/html/globals_e.html +6 -9
  396. package/SVF-doxygen/html/html/globals_func_d.html +0 -3
  397. package/SVF-doxygen/html/html/globals_func_e.html +6 -9
  398. package/SVF-doxygen/html/html/globals_func_g.html +2 -5
  399. package/SVF-doxygen/html/html/globals_g.html +0 -3
  400. package/SVF-doxygen/html/html/globals_o.html +0 -9
  401. package/SVF-doxygen/html/html/globals_p.html +1 -1
  402. package/SVF-doxygen/html/html/globals_r.html +3 -3
  403. package/SVF-doxygen/html/html/globals_s.html +3 -3
  404. package/SVF-doxygen/html/html/globals_vars.html +2 -5
  405. package/SVF-doxygen/html/html/globals_z.html +1 -1
  406. package/SVF-doxygen/html/html/hierarchy.html +105 -101
  407. package/SVF-doxygen/html/html/menudata.js +0 -1
  408. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  409. package/SVF-doxygen/html/html/namespaceSVF.html +27 -37
  410. package/SVF-doxygen/html/html/namespacemembers_p.html +0 -3
  411. package/SVF-doxygen/html/html/namespacemembers_type_p.html +0 -3
  412. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  413. package/SVF-doxygen/html/html/search/all_1.js +20 -21
  414. package/SVF-doxygen/html/html/search/all_10.js +11 -10
  415. package/SVF-doxygen/html/html/search/all_12.js +6 -7
  416. package/SVF-doxygen/html/html/search/all_13.js +13 -13
  417. package/SVF-doxygen/html/html/search/all_14.js +3 -3
  418. package/SVF-doxygen/html/html/search/all_15.js +2 -4
  419. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  420. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  421. package/SVF-doxygen/html/html/search/all_1a.js +1 -1
  422. package/SVF-doxygen/html/html/search/all_1b.js +0 -1
  423. package/SVF-doxygen/html/html/search/all_2.js +13 -10
  424. package/SVF-doxygen/html/html/search/all_3.js +15 -15
  425. package/SVF-doxygen/html/html/search/all_4.js +2 -4
  426. package/SVF-doxygen/html/html/search/all_5.js +3 -6
  427. package/SVF-doxygen/html/html/search/all_6.js +1 -4
  428. package/SVF-doxygen/html/html/search/all_7.js +34 -34
  429. package/SVF-doxygen/html/html/search/all_8.js +2 -5
  430. package/SVF-doxygen/html/html/search/all_9.js +4 -5
  431. package/SVF-doxygen/html/html/search/all_b.js +1 -1
  432. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  433. package/SVF-doxygen/html/html/search/all_d.js +6 -3
  434. package/SVF-doxygen/html/html/search/all_e.js +6 -6
  435. package/SVF-doxygen/html/html/search/all_f.js +7 -8
  436. package/SVF-doxygen/html/html/search/classes_1.js +2 -0
  437. package/SVF-doxygen/html/html/search/classes_2.js +1 -0
  438. package/SVF-doxygen/html/html/search/classes_4.js +1 -2
  439. package/SVF-doxygen/html/html/search/classes_a.js +1 -0
  440. package/SVF-doxygen/html/html/search/classes_d.js +1 -0
  441. package/SVF-doxygen/html/html/search/enumvalues_1.js +1 -0
  442. package/SVF-doxygen/html/html/search/enumvalues_d.js +1 -0
  443. package/SVF-doxygen/html/html/search/files_2.js +2 -1
  444. package/SVF-doxygen/html/html/search/files_4.js +1 -3
  445. package/SVF-doxygen/html/html/search/functions_0.js +20 -20
  446. package/SVF-doxygen/html/html/search/functions_1.js +10 -8
  447. package/SVF-doxygen/html/html/search/functions_10.js +2 -3
  448. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  449. package/SVF-doxygen/html/html/search/functions_12.js +1 -1
  450. package/SVF-doxygen/html/html/search/functions_13.js +1 -1
  451. package/SVF-doxygen/html/html/search/functions_16.js +0 -1
  452. package/SVF-doxygen/html/html/search/functions_2.js +8 -8
  453. package/SVF-doxygen/html/html/search/functions_3.js +2 -4
  454. package/SVF-doxygen/html/html/search/functions_4.js +0 -2
  455. package/SVF-doxygen/html/html/search/functions_6.js +34 -34
  456. package/SVF-doxygen/html/html/search/functions_7.js +2 -4
  457. package/SVF-doxygen/html/html/search/functions_8.js +3 -4
  458. package/SVF-doxygen/html/html/search/functions_b.js +2 -0
  459. package/SVF-doxygen/html/html/search/functions_d.js +4 -6
  460. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  461. package/SVF-doxygen/html/html/search/functions_f.js +2 -2
  462. package/SVF-doxygen/html/html/search/related_0.js +1 -2
  463. package/SVF-doxygen/html/html/search/related_1.js +2 -1
  464. package/SVF-doxygen/html/html/search/related_2.js +1 -1
  465. package/SVF-doxygen/html/html/search/related_3.js +1 -2
  466. package/SVF-doxygen/html/html/search/related_4.js +2 -1
  467. package/SVF-doxygen/html/html/search/related_5.js +1 -4
  468. package/SVF-doxygen/html/html/search/related_6.js +4 -1
  469. package/SVF-doxygen/html/html/search/related_7.js +1 -5
  470. package/SVF-doxygen/html/html/search/related_8.js +5 -2
  471. package/SVF-doxygen/html/html/search/related_9.js +2 -1
  472. package/SVF-doxygen/html/html/search/related_a.html +26 -0
  473. package/SVF-doxygen/html/html/search/related_a.js +4 -0
  474. package/SVF-doxygen/html/html/search/searchdata.js +1 -1
  475. package/SVF-doxygen/html/html/search/typedefs_1.js +0 -2
  476. package/SVF-doxygen/html/html/search/typedefs_13.js +0 -2
  477. package/SVF-doxygen/html/html/search/typedefs_14.js +1 -0
  478. package/SVF-doxygen/html/html/search/typedefs_15.js +1 -1
  479. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -3
  480. package/SVF-doxygen/html/html/search/typedefs_d.js +2 -2
  481. package/SVF-doxygen/html/html/search/typedefs_e.js +1 -0
  482. package/SVF-doxygen/html/html/search/typedefs_f.js +2 -2
  483. package/SVF-doxygen/html/html/search/variables_1.js +0 -1
  484. package/SVF-doxygen/html/html/search/variables_10.js +2 -1
  485. package/SVF-doxygen/html/html/search/variables_12.js +0 -1
  486. package/SVF-doxygen/html/html/search/variables_13.js +2 -1
  487. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  488. package/SVF-doxygen/html/html/search/variables_15.js +1 -2
  489. package/SVF-doxygen/html/html/search/variables_16.js +1 -1
  490. package/SVF-doxygen/html/html/search/variables_1a.js +1 -1
  491. package/SVF-doxygen/html/html/search/variables_2.js +2 -1
  492. package/SVF-doxygen/html/html/search/variables_3.js +2 -2
  493. package/SVF-doxygen/html/html/search/variables_4.js +0 -1
  494. package/SVF-doxygen/html/html/search/variables_5.js +1 -1
  495. package/SVF-doxygen/html/html/search/variables_6.js +1 -4
  496. package/SVF-doxygen/html/html/search/variables_8.js +0 -1
  497. package/SVF-doxygen/html/html/search/variables_b.js +1 -1
  498. package/SVF-doxygen/html/html/search/variables_d.js +2 -1
  499. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  500. package/SVF-doxygen/html/html/search/variables_f.js +2 -1
  501. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +14 -14
  502. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
  503. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
  504. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +18 -18
  505. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +11 -11
  506. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +29 -29
  507. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.html +2 -2
  508. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1SVFVar_01_5_01_4_01_4.html +1 -1
  509. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1VFGNode_01_5_01_4_01_4.html +1 -1
  510. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html +3 -3
  511. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.html +2 -2
  512. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1IRGraph_01_5_01_4.html +2 -2
  513. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFVar_01_5_01_4.html +1 -1
  514. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFGNode_01_5_01_4.html +1 -1
  515. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFG_01_5_01_4.html +2 -2
  516. package/SVF-doxygen/html/html/svf-ex_8cpp.html +5 -6
  517. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +5 -5
  518. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  519. package/include/{SVF-FE → Graphs}/CHG.h +37 -20
  520. package/include/Graphs/GenericGraph.h +1 -1
  521. package/include/Graphs/IRGraph.h +6 -15
  522. package/include/Graphs/SVFGOPT.h +3 -2
  523. package/include/Graphs/VFG.h +42 -41
  524. package/include/Graphs/VFGNode.h +60 -7
  525. package/include/MemoryModel/SVFIR.h +93 -159
  526. package/include/MemoryModel/SVFStatements.h +253 -21
  527. package/include/SVF-FE/CHGBuilder.h +69 -0
  528. package/include/SVF-FE/DCHG.h +1 -1
  529. package/include/SVF-FE/SVFIRBuilder.h +21 -8
  530. package/lib/Graphs/CHG.cpp +280 -0
  531. package/lib/Graphs/ConsG.cpp +9 -0
  532. package/lib/Graphs/IRGraph.cpp +23 -8
  533. package/lib/Graphs/VFG.cpp +45 -19
  534. package/lib/MSSA/SVFGBuilder.cpp +3 -2
  535. package/lib/MemoryModel/PAGBuilderFromFile.cpp +9 -3
  536. package/lib/MemoryModel/PointerAnalysis.cpp +3 -5
  537. package/lib/MemoryModel/SVFIR.cpp +68 -12
  538. package/lib/MemoryModel/SVFStatements.cpp +65 -4
  539. package/lib/SVF-FE/{CHG.cpp → CHGBuilder.cpp} +82 -324
  540. package/lib/SVF-FE/SVFIRBuilder.cpp +58 -57
  541. package/lib/WPA/Andersen.cpp +1 -1
  542. package/lib/WPA/TypeAnalysis.cpp +1 -1
  543. package/package.json +1 -1
  544. package/tools/Example/svf-ex.cpp +1 -1
  545. package/include/Graphs/ExternalPAG.h +0 -147
  546. package/include/SVF-FE/CommonCHG.h +0 -49
  547. package/lib/Graphs/ExternalPAG.cpp +0 -623
@@ -1,8 +1,8 @@
1
- //===----- CHG.cpp Base class of pointer analyses ---------------------------//
1
+ //===----- CHGBuiler.cpp -- Class hierarchy graph builder ---------------------------//
2
2
  //
3
3
  // SVF: Static Value-Flow Analysis
4
4
  //
5
- // Copyright (C) <2013-2017> <Yulei Sui>
5
+ // Copyright (C) <2013-> <Yulei Sui>
6
6
  //
7
7
 
8
8
  // This program is free software: you can redistribute it and/or modify
@@ -21,10 +21,10 @@
21
21
  //===----------------------------------------------------------------------===//
22
22
 
23
23
  /*
24
- * CHG.cpp (previously CHA.cpp)
24
+ * CHGBuiler.cpp
25
25
  *
26
- * Created on: Apr 13, 2016
27
- * Author: Xiaokang Fan
26
+ * Created on: Jun 4, 2021
27
+ * Author: Yulei Sui
28
28
  */
29
29
 
30
30
  #include <set>
@@ -36,9 +36,9 @@
36
36
  #include <assert.h>
37
37
  #include <stack>
38
38
 
39
+ #include "SVF-FE/CHGBuilder.h"
39
40
  #include "Util/Options.h"
40
41
  #include "SVF-FE/CPPUtil.h"
41
- #include "SVF-FE/CHG.h"
42
42
  #include "MemoryModel/SymbolTableInfo.h"
43
43
  #include "Util/SVFUtil.h"
44
44
  #include "SVF-FE/LLVMUtil.h"
@@ -48,38 +48,13 @@
48
48
  using namespace SVF;
49
49
  using namespace SVFUtil;
50
50
  using namespace cppUtil;
51
- using namespace std;
52
-
53
51
 
54
52
  const string pureVirtualFunName = "__cxa_pure_virtual";
55
53
 
56
54
  const string ztiLabel = "_ZTI";
57
55
 
58
- static bool hasEdge(const CHNode *src, const CHNode *dst,
59
- CHEdge::CHEDGETYPE et)
60
- {
61
- for (CHEdge::CHEdgeSetTy::const_iterator it = src->getOutEdges().begin(),
62
- eit = src->getOutEdges().end(); it != eit; ++it)
63
- {
64
- CHNode *node = (*it)->getDstNode();
65
- CHEdge::CHEDGETYPE edgeType = (*it)->getEdgeType();
66
- if (node == dst && edgeType == et)
67
- return true;
68
- }
69
- return false;
70
- }
71
56
 
72
- void CHNode::getVirtualFunctions(u32_t idx, FuncVector &virtualFunctions) const
73
- {
74
- for (vector<FuncVector>::const_iterator it = virtualFunctionVectors.begin(),
75
- eit = virtualFunctionVectors.end(); it != eit; ++it)
76
- {
77
- if ((*it).size() > idx)
78
- virtualFunctions.push_back((*it)[idx]);
79
- }
80
- }
81
-
82
- void CHGraph::buildCHG()
57
+ void CHGBuilder::buildCHG()
83
58
  {
84
59
 
85
60
  double timeStart, timeEnd;
@@ -105,20 +80,20 @@ void CHGraph::buildCHG()
105
80
  buildInternalMaps();
106
81
 
107
82
  timeEnd = PTAStat::getClk(true);
108
- buildingCHGTime = (timeEnd - timeStart) / TIMEINTERVAL;
83
+ chg->buildingCHGTime = (timeEnd - timeStart) / TIMEINTERVAL;
109
84
 
110
85
  if (Options::DumpCHA)
111
- dump("cha");
86
+ chg->dump("cha");
112
87
  }
113
88
 
114
- void CHGraph::buildCHGNodes(const GlobalValue *globalvalue)
89
+ void CHGBuilder::buildCHGNodes(const GlobalValue *globalvalue)
115
90
  {
116
91
  if (isValVtbl(globalvalue) && globalvalue->getNumOperands() > 0)
117
92
  {
118
93
  const ConstantStruct *vtblStruct = SVFUtil::dyn_cast<ConstantStruct>(globalvalue->getOperand(0));
119
94
  assert(vtblStruct && "Initializer of a vtable not a struct?");
120
95
  string className = getClassNameFromVtblObj(globalvalue);
121
- if (!getNode(className))
96
+ if (!chg->getNode(className))
122
97
  createNode(className);
123
98
 
124
99
  for (unsigned int ei = 0; ei < vtblStruct->getNumOperands(); ++ei)
@@ -133,7 +108,7 @@ void CHGraph::buildCHGNodes(const GlobalValue *globalvalue)
133
108
  if (const Function* func = SVFUtil::dyn_cast<Function>(bitcastValue))
134
109
  {
135
110
  struct DemangledName dname = demangle(func->getName().str());
136
- if (!getNode(dname.className))
111
+ if (!chg->getNode(dname.className))
137
112
  createNode(dname.className);
138
113
  }
139
114
  }
@@ -142,19 +117,19 @@ void CHGraph::buildCHGNodes(const GlobalValue *globalvalue)
142
117
  }
143
118
  }
144
119
 
145
- void CHGraph::buildCHGNodes(const SVFFunction* fun)
120
+ void CHGBuilder::buildCHGNodes(const SVFFunction* fun)
146
121
  {
147
122
  const Function* F = fun->getLLVMFun();
148
123
  if (isConstructor(F) || isDestructor(F))
149
124
  {
150
125
  struct DemangledName dname = demangle(F->getName().str());
151
126
  DBOUT(DCHA, outs() << "\t build CHANode for class " + dname.className + "...\n");
152
- if (!getNode(dname.className))
127
+ if (!chg->getNode(dname.className))
153
128
  createNode(dname.className);
154
129
  }
155
130
  }
156
131
 
157
- void CHGraph::buildCHGEdges(const SVFFunction* fun)
132
+ void CHGBuilder::buildCHGEdges(const SVFFunction* fun)
158
133
  {
159
134
  const Function* F = fun->getLLVMFun();
160
135
 
@@ -179,14 +154,14 @@ void CHGraph::buildCHGEdges(const SVFFunction* fun)
179
154
  }
180
155
 
181
156
 
182
- void CHGraph::buildInternalMaps()
157
+ void CHGBuilder::buildInternalMaps()
183
158
  {
184
159
  buildClassNameToAncestorsDescendantsMap();
185
160
  buildVirtualFunctionToIDMap();
186
161
  buildCSToCHAVtblsAndVfnsMap();
187
162
  }
188
163
 
189
- void CHGraph::connectInheritEdgeViaCall(const SVFFunction* callerfun, CallSite cs)
164
+ void CHGBuilder::connectInheritEdgeViaCall(const SVFFunction* callerfun, CallSite cs)
190
165
  {
191
166
  if (getCallee(cs) == nullptr)
192
167
  return;
@@ -209,13 +184,13 @@ void CHGraph::connectInheritEdgeViaCall(const SVFFunction* callerfun, CallSite c
209
184
  if (!SVFUtil::isCallSite(csThisPtr) &&
210
185
  basename.className.size() > 0)
211
186
  {
212
- addEdge(dname.className, basename.className, CHEdge::INHERITANCE);
187
+ chg->addEdge(dname.className, basename.className, CHEdge::INHERITANCE);
213
188
  }
214
189
  }
215
190
  }
216
191
  }
217
192
 
218
- void CHGraph::connectInheritEdgeViaStore(const SVFFunction* caller, const StoreInst* storeInst)
193
+ void CHGBuilder::connectInheritEdgeViaStore(const SVFFunction* caller, const StoreInst* storeInst)
219
194
  {
220
195
  struct DemangledName dname = demangle(caller->getName().str());
221
196
  if (const ConstantExpr *ce = SVFUtil::dyn_cast<ConstantExpr>(storeInst->getValueOperand()))
@@ -233,7 +208,7 @@ void CHGraph::connectInheritEdgeViaStore(const SVFFunction* caller, const StoreI
233
208
  string vtblClassName = getClassNameFromVtblObj(gepval);
234
209
  if (vtblClassName.size() > 0 && dname.className.compare(vtblClassName) != 0)
235
210
  {
236
- addEdge(dname.className, vtblClassName, CHEdge::INHERITANCE);
211
+ chg->addEdge(dname.className, vtblClassName, CHEdge::INHERITANCE);
237
212
  }
238
213
  }
239
214
  }
@@ -242,7 +217,7 @@ void CHGraph::connectInheritEdgeViaStore(const SVFFunction* caller, const StoreI
242
217
  }
243
218
  }
244
219
 
245
- void CHGraph::readInheritanceMetadataFromModule(const Module &M)
220
+ void CHGBuilder::readInheritanceMetadataFromModule(const Module &M)
246
221
  {
247
222
  for (Module::const_named_metadata_iterator mdit = M.named_metadata_begin(),
248
223
  mdeit = M.named_metadata_end(); mdit != mdeit; ++mdit)
@@ -258,52 +233,29 @@ void CHGraph::readInheritanceMetadataFromModule(const Module &M)
258
233
  const MDNode *N = *opit;
259
234
  const MDString &mdstr = SVFUtil::cast<MDString>(N->getOperand(0));
260
235
  string baseName = mdstr.getString().str();
261
- addEdge(className, baseName, CHEdge::INHERITANCE);
236
+ chg->addEdge(className, baseName, CHEdge::INHERITANCE);
262
237
  }
263
238
  }
264
239
  }
265
240
 
266
- void CHGraph::addEdge(const string className, const string baseClassName,
267
- CHEdge::CHEDGETYPE edgeType)
268
- {
269
- CHNode *srcNode = getNode(className);
270
- CHNode *dstNode = getNode(baseClassName);
271
- assert(srcNode && dstNode && "node not found?");
272
-
273
- if (!hasEdge(srcNode, dstNode, edgeType))
274
- {
275
- CHEdge *edge = new CHEdge(srcNode, dstNode, edgeType);
276
- srcNode->addOutgoingEdge(edge);
277
- dstNode->addIncomingEdge(edge);
278
- }
279
- }
280
-
281
- CHNode *CHGraph::getNode(const string name) const
282
- {
283
- auto chNode = classNameToNodeMap.find(name);
284
- if (chNode != classNameToNodeMap.end()) return chNode->second;
285
- else return nullptr;
286
- }
287
-
288
-
289
- CHNode *CHGraph::createNode(const std::string className)
241
+ CHNode *CHGBuilder::createNode(const std::string className)
290
242
  {
291
- assert(!getNode(className) && "this node should never be created before!");
292
- CHNode * node = new CHNode(className, classNum++);
293
- classNameToNodeMap[className] = node;
294
- addGNode(node->getId(), node);
243
+ assert(!chg->getNode(className) && "this node should never be created before!");
244
+ CHNode * node = new CHNode(className, chg->classNum++);
245
+ chg->classNameToNodeMap[className] = node;
246
+ chg->addGNode(node->getId(), node);
295
247
  if (className.size() > 0 && className[className.size() - 1] == '>')
296
248
  {
297
249
  string templateName = getBeforeBrackets(className);
298
- CHNode* templateNode = getNode(templateName);
250
+ CHNode* templateNode = chg->getNode(templateName);
299
251
  if (!templateNode)
300
252
  {
301
253
  DBOUT(DCHA, outs() << "\t Create Template CHANode " + templateName + " for class " + className + "...\n");
302
254
  templateNode = createNode(templateName);
303
255
  templateNode->setTemplate();
304
256
  }
305
- addEdge(className, templateName, CHEdge::INSTANTCE);
306
- addInstances(templateName,node);
257
+ chg->addEdge(className, templateName, CHEdge::INSTANTCE);
258
+ chg->addInstances(templateName,node);
307
259
  }
308
260
  return node;
309
261
  }
@@ -311,12 +263,12 @@ CHNode *CHGraph::createNode(const std::string className)
311
263
  /*
312
264
  * build the following two maps:
313
265
  * classNameToDescendantsMap
314
- * classNameToAncestorsMap
266
+ * chg->classNameToAncestorsMap
315
267
  */
316
- void CHGraph::buildClassNameToAncestorsDescendantsMap()
268
+ void CHGBuilder::buildClassNameToAncestorsDescendantsMap()
317
269
  {
318
270
 
319
- for (CHGraph::const_iterator it = this->begin(), eit = this->end();
271
+ for (CHGraph::const_iterator it = chg->begin(), eit = chg->end();
320
272
  it != eit; ++it)
321
273
  {
322
274
  const CHNode *node = it->second;
@@ -335,8 +287,8 @@ void CHGraph::buildClassNameToAncestorsDescendantsMap()
335
287
  if ((*it)->getEdgeType() == CHEdge::INHERITANCE)
336
288
  {
337
289
  CHNode *succnode = (*it)->getDstNode();
338
- classNameToAncestorsMap[node->getName()].insert(succnode);
339
- classNameToDescendantsMap[succnode->getName()].insert(node);
290
+ chg->classNameToAncestorsMap[node->getName()].insert(succnode);
291
+ chg->classNameToDescendantsMap[succnode->getName()].insert(node);
340
292
  worklist.push(succnode);
341
293
  }
342
294
  }
@@ -347,47 +299,38 @@ void CHGraph::buildClassNameToAncestorsDescendantsMap()
347
299
  }
348
300
 
349
301
 
350
- const CHGraph::CHNodeSetTy& CHGraph::getInstancesAndDescendants(const string className)
302
+ const CHGraph::CHNodeSetTy& CHGBuilder::getInstancesAndDescendants(const string className)
351
303
  {
352
304
 
353
- NameToCHNodesMap::const_iterator it = classNameToInstAndDescsMap.find(className);
354
- if (it != classNameToInstAndDescsMap.end())
305
+ CHGraph::NameToCHNodesMap::const_iterator it = chg->classNameToInstAndDescsMap.find(className);
306
+ if (it != chg->classNameToInstAndDescsMap.end())
355
307
  {
356
308
  return it->second;
357
309
  }
358
310
  else
359
311
  {
360
- classNameToInstAndDescsMap[className] = getDescendants(className);
361
- if (getNode(className)->isTemplate())
312
+ chg->classNameToInstAndDescsMap[className] = chg->getDescendants(className);
313
+ if (chg->getNode(className)->isTemplate())
362
314
  {
363
- const CHNodeSetTy& instances = getInstances(className);
315
+ const CHNodeSetTy& instances = chg->getInstances(className);
364
316
  for (CHNodeSetTy::const_iterator it = instances.begin(), eit = instances.end(); it != eit; ++it)
365
317
  {
366
318
  const CHNode *node = *it;
367
- classNameToInstAndDescsMap[className].insert(node);
368
- const CHNodeSetTy& instance_descendants = getDescendants(node->getName());
319
+ chg->classNameToInstAndDescsMap[className].insert(node);
320
+ const CHNodeSetTy& instance_descendants = chg->getDescendants(node->getName());
369
321
  for (CHNodeSetTy::const_iterator dit =
370
322
  instance_descendants.begin(), deit =
371
323
  instance_descendants.end(); dit != deit; ++dit)
372
324
  {
373
- classNameToInstAndDescsMap[className].insert(*dit);
325
+ chg->classNameToInstAndDescsMap[className].insert(*dit);
374
326
  }
375
327
  }
376
328
  }
377
- return classNameToInstAndDescsMap[className];
329
+ return chg->classNameToInstAndDescsMap[className];
378
330
  }
379
331
  }
380
332
 
381
333
 
382
- void CHGraph::addFuncToFuncVector(CHNode::FuncVector &v, const SVFFunction *f) {
383
- const auto *lf = f->getLLVMFun();
384
- if (isCPPThunkFunction(lf)) {
385
- if(const auto *tf = getThunkTarget(lf))
386
- v.push_back(svfMod->getSVFFunction(tf));
387
- } else {
388
- v.push_back(f);
389
- }
390
- }
391
334
 
392
335
 
393
336
  /*
@@ -421,7 +364,7 @@ void CHGraph::addFuncToFuncVector(CHNode::FuncVector &v, const SVFFunction *f) {
421
364
  * number of "i8 *null" is the same as the number of virtual methods in
422
365
  * "class A"
423
366
  */
424
- void CHGraph::analyzeVTables(const Module &M)
367
+ void CHGBuilder::analyzeVTables(const Module &M)
425
368
  {
426
369
  for (Module::const_global_iterator I = M.global_begin(),
427
370
  E = M.global_end(); I != E; ++I)
@@ -434,7 +377,7 @@ void CHGraph::analyzeVTables(const Module &M)
434
377
  assert(vtblStruct && "Initializer of a vtable not a struct?");
435
378
 
436
379
  string vtblClassName = getClassNameFromVtblObj(globalvalue);
437
- CHNode *node = getNode(vtblClassName);
380
+ CHNode *node = chg->getNode(vtblClassName);
438
381
  assert(node && "node not found?");
439
382
 
440
383
  node->setVTable(globalvalue);
@@ -528,7 +471,7 @@ void CHGraph::analyzeVTables(const Module &M)
528
471
  if (dname.className.size() > 0 &&
529
472
  vtblClassName.compare(dname.className) != 0)
530
473
  {
531
- addEdge(vtblClassName, dname.className, CHEdge::INHERITANCE);
474
+ chg->addEdge(vtblClassName, dname.className, CHEdge::INHERITANCE);
532
475
  }
533
476
  }
534
477
  else
@@ -595,7 +538,7 @@ void CHGraph::analyzeVTables(const Module &M)
595
538
  }
596
539
 
597
540
 
598
- void CHGraph::buildVirtualFunctionToIDMap()
541
+ void CHGBuilder::buildVirtualFunctionToIDMap()
599
542
  {
600
543
  /*
601
544
  * 1. Divide classes into groups
@@ -603,9 +546,9 @@ void CHGraph::buildVirtualFunctionToIDMap()
603
546
  * 3. Assign consecutive IDs to virtual functions that have
604
547
  * the same name (after demangling) in a group
605
548
  */
606
- CHNodeSetTy visitedNodes;
607
- for (CHGraph::const_iterator nit = this->begin(),
608
- neit = this->end(); nit != neit; ++nit)
549
+ CHGraph::CHNodeSetTy visitedNodes;
550
+ for (CHGraph::const_iterator nit = chg->begin(),
551
+ neit = chg->end(); nit != neit; ++nit)
609
552
  {
610
553
  CHNode *node = nit->second;
611
554
  if (visitedNodes.find(node) != visitedNodes.end())
@@ -616,7 +559,7 @@ void CHGraph::buildVirtualFunctionToIDMap()
616
559
  /*
617
560
  * get all the classes in a specific group
618
561
  */
619
- CHNodeSetTy group;
562
+ CHGraph::CHNodeSetTy group;
620
563
  stack<const CHNode*> nodeStack;
621
564
  nodeStack.push(node);
622
565
  while (!nodeStack.empty())
@@ -647,7 +590,7 @@ void CHGraph::buildVirtualFunctionToIDMap()
647
590
  * get all virtual functions in a specific group
648
591
  */
649
592
  set<const SVFFunction*> virtualFunctions;
650
- for (CHNodeSetTy::iterator it = group.begin(),
593
+ for (CHGraph::CHNodeSetTy::iterator it = group.begin(),
651
594
  eit = group.end(); it != eit; ++it)
652
595
  {
653
596
  const vector<CHNode::FuncVector> &vecs = (*it)->getVirtualFunctionVectors();
@@ -677,7 +620,7 @@ void CHGraph::buildVirtualFunctionToIDMap()
677
620
  * <~C, C::~C>
678
621
  * ...
679
622
  */
680
- set<pair<string, const SVFFunction*>> fNameSet;
623
+ set<pair<string, const SVFFunction*> > fNameSet;
681
624
  for (set<const SVFFunction*>::iterator fit = virtualFunctions.begin(),
682
625
  feit = virtualFunctions.end(); fit != feit; ++fit)
683
626
  {
@@ -688,141 +631,13 @@ void CHGraph::buildVirtualFunctionToIDMap()
688
631
  for (set<pair<string, const SVFFunction*>>::iterator it = fNameSet.begin(),
689
632
  eit = fNameSet.end(); it != eit; ++it)
690
633
  {
691
- virtualFunctionToIDMap[it->second] = vfID++;
692
- }
693
- }
694
- }
695
-
696
- const CHGraph::CHNodeSetTy& CHGraph::getCSClasses(CallSite cs)
697
- {
698
- assert(isVirtualCallSite(cs) && "not virtual callsite!");
699
-
700
- CallSiteToCHNodesMap::const_iterator it = csToClassesMap.find(cs);
701
- if (it != csToClassesMap.end())
702
- {
703
- return it->second;
704
- }
705
- else
706
- {
707
- string thisPtrClassName = getClassNameOfThisPtr(cs);
708
- if (const CHNode* thisNode = getNode(thisPtrClassName))
709
- {
710
- const CHNodeSetTy& instAndDesces = getInstancesAndDescendants(thisPtrClassName);
711
- csToClassesMap[cs].insert(thisNode);
712
- for (CHNodeSetTy::const_iterator it = instAndDesces.begin(), eit = instAndDesces.end(); it != eit; ++it)
713
- csToClassesMap[cs].insert(*it);
634
+ chg->virtualFunctionToIDMap[it->second] = chg->vfID++;
714
635
  }
715
- return csToClassesMap[cs];
716
636
  }
717
637
  }
718
638
 
719
- static bool checkArgTypes(CallSite cs, const Function *fn) {
720
-
721
- // here we skip the first argument (i.e., this pointer)
722
- u32_t arg_size = (fn->arg_size() > cs.arg_size()) ? cs.arg_size(): fn->arg_size();
723
- if(arg_size > 1){
724
- for (unsigned i = 1; i < arg_size; i++) {
725
- auto cs_arg = cs.getArgOperand(i);
726
- auto fn_arg = fn->getArg(i);
727
- if (cs_arg->getType() != fn_arg->getType()) {
728
- return false;
729
- }
730
- }
731
- }
732
-
733
- return true;
734
- }
735
639
 
736
- /*
737
- * Get virtual functions for callsite "cs" based on vtbls (calculated
738
- * based on pointsto set)
739
- */
740
- void CHGraph::getVFnsFromVtbls(CallSite cs, const VTableSet &vtbls, VFunSet &virtualFunctions)
741
- {
742
-
743
- /// get target virtual functions
744
- size_t idx = getVCallIdx(cs);
745
- /// get the function name of the virtual callsite
746
- string funName = getFunNameOfVCallSite(cs);
747
- for (const GlobalValue *vt : vtbls)
748
- {
749
- const CHNode *child = getNode(getClassNameFromVtblObj(vt));
750
- if (child == nullptr)
751
- continue;
752
- CHNode::FuncVector vfns;
753
- child->getVirtualFunctions(idx, vfns);
754
- for (CHNode::FuncVector::const_iterator fit = vfns.begin(),
755
- feit = vfns.end(); fit != feit; ++fit)
756
- {
757
- const SVFFunction* callee = *fit;
758
- if (cs.arg_size() == callee->arg_size() ||
759
- (cs.getFunctionType()->isVarArg() && callee->isVarArg()))
760
- {
761
-
762
- // if argument types do not match
763
- // skip this one
764
- if (!checkArgTypes(cs, callee->getLLVMFun()))
765
- continue;
766
-
767
- DemangledName dname = demangle(callee->getName().str());
768
- string calleeName = dname.funcName;
769
-
770
- /*
771
- * The compiler will add some special suffix (e.g.,
772
- * "[abi:cxx11]") to the end of some virtual function:
773
- * In dealII
774
- * function: FE_Q<3>::get_name
775
- * will be mangled as: _ZNK4FE_QILi3EE8get_nameB5cxx11Ev
776
- * after demangling: FE_Q<3>::get_name[abi:cxx11]
777
- * The special suffix ("[abi:cxx11]") needs to be removed
778
- */
779
- const std::string suffix("[abi:cxx11]");
780
- size_t suffix_pos = calleeName.rfind(suffix);
781
- if (suffix_pos != string::npos)
782
- calleeName.erase(suffix_pos, suffix.size());
783
-
784
- /*
785
- * if we can't get the function name of a virtual callsite, all virtual
786
- * functions calculated by idx will be valid
787
- */
788
- if (funName.size() == 0)
789
- {
790
- virtualFunctions.insert(callee);
791
- }
792
- else if (funName[0] == '~')
793
- {
794
- /*
795
- * if the virtual callsite is calling a destructor, then all
796
- * destructors in the ch will be valid
797
- * class A { virtual ~A(){} };
798
- * class B: public A { virtual ~B(){} };
799
- * int main() {
800
- * A *a = new B;
801
- * delete a; /// the function name of this virtual callsite is ~A()
802
- * }
803
- */
804
- if (calleeName[0] == '~')
805
- {
806
- virtualFunctions.insert(callee);
807
- }
808
- }
809
- else
810
- {
811
- /*
812
- * for other virtual function calls, the function name of the callsite
813
- * and the function name of the target callee should match exactly
814
- */
815
- if (funName.compare(calleeName) == 0)
816
- {
817
- virtualFunctions.insert(callee);
818
- }
819
- }
820
- }
821
- }
822
- }
823
- }
824
-
825
- void CHGraph::buildCSToCHAVtblsAndVfnsMap()
640
+ void CHGBuilder::buildCSToCHAVtblsAndVfnsMap()
826
641
  {
827
642
 
828
643
  for (SymbolTableInfo::CallSiteSet::const_iterator it =
@@ -845,101 +660,44 @@ void CHGraph::buildCSToCHAVtblsAndVfnsMap()
845
660
  }
846
661
  if (vtbls.size() > 0)
847
662
  {
848
- csToCHAVtblsMap[cs] = vtbls;
663
+ chg->csToCHAVtblsMap[cs] = vtbls;
849
664
  VFunSet virtualFunctions;
850
- getVFnsFromVtbls(cs, vtbls, virtualFunctions);
665
+ chg->getVFnsFromVtbls(cs, vtbls, virtualFunctions);
851
666
  if (virtualFunctions.size() > 0)
852
- csToCHAVFnsMap[cs] = virtualFunctions;
667
+ chg->csToCHAVFnsMap[cs] = virtualFunctions;
853
668
  }
854
669
  }
855
670
  }
856
671
 
857
- void CHGraph::printCH()
672
+ const CHGraph::CHNodeSetTy& CHGBuilder::getCSClasses(CallSite cs)
858
673
  {
859
- for (CHGraph::const_iterator it = this->begin(), eit = this->end();
860
- it != eit; ++it)
861
- {
862
- const CHNode *node = it->second;
863
- outs() << "class: " << node->getName() << "\n";
864
- for (CHEdge::CHEdgeSetTy::const_iterator it = node->OutEdgeBegin();
865
- it != node->OutEdgeEnd(); ++it)
866
- {
867
- if ((*it)->getEdgeType() == CHEdge::INHERITANCE)
868
- outs() << (*it)->getDstNode()->getName() << " --inheritance--> "
869
- << (*it)->getSrcNode()->getName() << "\n";
870
- else
871
- outs() << (*it)->getSrcNode()->getName() << " --instance--> "
872
- << (*it)->getDstNode()->getName() << "\n";
873
- }
874
- }
875
- outs() << '\n';
876
- }
877
-
878
- /*!
879
- * Dump call graph into dot file
880
- */
881
- void CHGraph::dump(const std::string& filename)
882
- {
883
- GraphPrinter::WriteGraphToFile(outs(), filename, this);
884
- printCH();
885
- }
886
-
887
- void CHGraph::view()
888
- {
889
- llvm::ViewGraph(this, "Class Hierarchy Graph");
890
- }
891
-
892
- namespace llvm
893
- {
894
-
895
- /*!
896
- * Write value flow graph into dot file for debugging
897
- */
898
- template<>
899
- struct DOTGraphTraits<CHGraph*> : public DefaultDOTGraphTraits
900
- {
901
-
902
- typedef CHNode NodeType;
903
- DOTGraphTraits(bool isSimple = false) :
904
- DefaultDOTGraphTraits(isSimple)
905
- {
906
- }
674
+ assert(isVirtualCallSite(cs) && "not virtual callsite!");
907
675
 
908
- /// Return name of the graph
909
- static std::string getGraphName(CHGraph*)
676
+ CHGraph::CallSiteToCHNodesMap::const_iterator it = chg->csToClassesMap.find(cs);
677
+ if (it != chg->csToClassesMap.end())
910
678
  {
911
- return "Class Hierarchy Graph";
912
- }
913
- /// Return function name;
914
- static std::string getNodeLabel(CHNode *node, CHGraph*)
915
- {
916
- return node->getName();
679
+ return it->second;
917
680
  }
918
-
919
- static std::string getNodeAttributes(CHNode *node, CHGraph*)
681
+ else
920
682
  {
921
- if (node->isPureAbstract())
683
+ string thisPtrClassName = getClassNameOfThisPtr(cs);
684
+ if (const CHNode* thisNode = chg->getNode(thisPtrClassName))
922
685
  {
923
- return "shape=tab";
686
+ const CHGraph::CHNodeSetTy& instAndDesces = getInstancesAndDescendants(thisPtrClassName);
687
+ chg->csToClassesMap[cs].insert(thisNode);
688
+ for (CHGraph::CHNodeSetTy::const_iterator it = instAndDesces.begin(), eit = instAndDesces.end(); it != eit; ++it)
689
+ chg->csToClassesMap[cs].insert(*it);
924
690
  }
925
- else
926
- return "shape=box";
691
+ return chg->csToClassesMap[cs];
927
692
  }
693
+ }
928
694
 
929
- template<class EdgeIter>
930
- static std::string getEdgeAttributes(CHNode*, EdgeIter EI, CHGraph*)
931
- {
932
-
933
- CHEdge* edge = *(EI.getCurrent());
934
- assert(edge && "No edge found!!");
935
- if (edge->getEdgeType() == CHEdge::INHERITANCE)
936
- {
937
- return "style=solid";
938
- }
939
- else
940
- {
941
- return "style=dashed";
942
- }
695
+ void CHGBuilder::addFuncToFuncVector(CHNode::FuncVector &v, const SVFFunction *f) {
696
+ const auto *lf = f->getLLVMFun();
697
+ if (isCPPThunkFunction(lf)) {
698
+ if(const auto *tf = getThunkTarget(lf))
699
+ v.push_back(chg->svfMod->getSVFFunction(tf));
700
+ } else {
701
+ v.push_back(f);
943
702
  }
944
- };
945
- } // End namespace llvm
703
+ }