svf-tools 1.0.479 → 1.0.482

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 (355) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
  2. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +1 -1
  4. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +8 -8
  5. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  6. package/SVF-doxygen/html/html/Andersen_8h_source.html +6 -6
  7. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +5 -5
  8. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +1 -1
  9. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +7 -7
  11. package/SVF-doxygen/html/html/CHG_8cpp_source.html +3 -3
  12. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +14 -15
  13. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +14 -14
  14. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +13 -13
  16. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +7 -7
  17. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +8 -8
  19. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
  20. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
  21. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
  22. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +6 -6
  23. package/SVF-doxygen/html/html/ExeState_8h_source.html +2 -2
  24. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +35 -31
  25. package/SVF-doxygen/html/html/ExtAPI_8h.html +36 -0
  26. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +65 -63
  27. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +3 -3
  28. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +4 -4
  29. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +12 -12
  30. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
  31. package/SVF-doxygen/html/html/FlowSensitive_8cpp.html +0 -1
  32. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +32 -38
  33. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +66 -67
  34. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
  35. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +6 -6
  36. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
  37. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -7
  38. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  39. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  40. package/SVF-doxygen/html/html/MTA_8cpp_source.html +2 -2
  41. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +6 -6
  42. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +5 -5
  43. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  44. package/SVF-doxygen/html/html/Options_8cpp_source.html +17 -21
  45. package/SVF-doxygen/html/html/Options_8h_source.html +13 -16
  46. package/SVF-doxygen/html/html/PCG_8h_source.html +3 -3
  47. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +5 -5
  48. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  49. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +21 -22
  50. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +17 -17
  51. package/SVF-doxygen/html/html/PointerAnalysis_8cpp.html +0 -1
  52. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +64 -69
  53. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +109 -110
  54. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +2 -2
  55. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +3 -3
  56. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
  57. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
  58. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +12 -12
  59. package/SVF-doxygen/html/html/SVFIR_8h_source.html +9 -9
  60. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +7 -7
  61. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +26 -32
  62. package/SVF-doxygen/html/html/SVFVariables_8h.html +0 -6
  63. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +109 -130
  64. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  65. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
  66. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  67. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  68. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +16 -16
  69. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +15 -15
  70. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
  71. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
  72. package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +5 -5
  73. package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
  74. package/SVF-doxygen/html/html/VFG_8cpp_source.html +9 -9
  75. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  76. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +16 -16
  77. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +4 -4
  78. package/SVF-doxygen/html/html/WPAPass_8cpp.html +0 -1
  79. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +16 -19
  80. package/SVF-doxygen/html/html/WPAPass_8h_source.html +6 -6
  81. package/SVF-doxygen/html/html/annotated.html +248 -253
  82. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  83. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  84. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  85. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +173 -174
  86. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +27 -29
  87. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +146 -147
  88. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +17 -19
  89. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +185 -186
  90. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +7 -8
  91. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +189 -190
  92. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +6 -7
  93. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +180 -181
  94. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +8 -9
  95. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +182 -183
  96. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +11 -12
  97. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +185 -186
  98. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +8 -9
  99. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +11 -11
  100. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +177 -178
  101. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +8 -9
  102. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +4 -4
  103. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +103 -104
  104. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +42 -48
  105. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.png +0 -0
  106. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -3
  107. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +73 -74
  108. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +13 -14
  109. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
  110. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +13 -13
  111. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +3 -3
  112. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -3
  113. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +94 -95
  114. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +26 -28
  115. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +163 -164
  116. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +33 -35
  117. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +2 -2
  118. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
  119. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +15 -15
  120. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +5 -5
  121. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +2 -2
  122. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +72 -75
  123. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +16 -27
  124. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.png +0 -0
  125. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +70 -73
  126. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +17 -20
  127. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +6 -6
  128. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +5 -4
  129. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +146 -113
  130. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar-members.html +72 -75
  131. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +18 -29
  132. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.png +0 -0
  133. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +112 -114
  134. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +12 -15
  135. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +163 -164
  136. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +25 -27
  137. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +106 -108
  138. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +234 -314
  139. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.png +0 -0
  140. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +43 -43
  141. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
  142. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +4 -4
  144. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +77 -80
  145. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +38 -49
  146. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.png +0 -0
  147. package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +73 -76
  148. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +28 -31
  149. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +9 -9
  150. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +2 -2
  153. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +44 -45
  155. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +4 -45
  156. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
  157. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +14 -14
  158. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  159. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
  160. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
  161. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +8 -8
  162. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
  163. package/SVF-doxygen/html/html/classSVF_1_1ObjVar-members.html +71 -74
  164. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +30 -42
  165. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.png +0 -0
  166. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +104 -107
  167. package/SVF-doxygen/html/html/classSVF_1_1Options.html +13 -94
  168. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +3 -3
  169. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +4 -4
  170. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +5 -5
  171. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +1 -1
  172. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +69 -70
  173. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +302 -319
  174. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.png +0 -0
  175. package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +70 -73
  176. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +18 -21
  177. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +5 -5
  178. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +2 -2
  179. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +18 -18
  180. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +13 -13
  181. package/SVF-doxygen/html/html/classSVF_1_1SVFVar-members.html +73 -76
  182. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +84 -99
  183. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.png +0 -0
  184. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +2 -2
  185. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +8 -8
  186. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +2 -3
  187. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +157 -158
  188. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +6 -7
  189. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +53 -52
  190. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +4 -4
  191. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
  192. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +150 -151
  193. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +21 -23
  194. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +2 -2
  195. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +9 -9
  196. package/SVF-doxygen/html/html/classSVF_1_1ValVar-members.html +69 -72
  197. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +23 -26
  198. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +70 -73
  199. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +18 -21
  200. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +125 -127
  201. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +44 -48
  202. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +31 -31
  203. package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +6 -7
  204. package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.png +0 -0
  205. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +38 -40
  206. package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +17 -15
  207. package/SVF-doxygen/html/html/classSVF_1_1WPASolver.png +0 -0
  208. package/SVF-doxygen/html/html/classes.html +104 -105
  209. package/SVF-doxygen/html/html/dir_66541c162fd98954e2c32089ba9a721f.html +0 -4
  210. package/SVF-doxygen/html/html/dir_ea25a8a5b2904424d8a51916f8b475b2.html +0 -4
  211. package/SVF-doxygen/html/html/files.html +12 -16
  212. package/SVF-doxygen/html/html/functions_0x7e.html +0 -6
  213. package/SVF-doxygen/html/html/functions_a.html +8 -30
  214. package/SVF-doxygen/html/html/functions_b.html +8 -12
  215. package/SVF-doxygen/html/html/functions_c.html +24 -54
  216. package/SVF-doxygen/html/html/functions_d.html +1 -13
  217. package/SVF-doxygen/html/html/functions_e.html +1 -2
  218. package/SVF-doxygen/html/html/functions_eval_c.html +0 -9
  219. package/SVF-doxygen/html/html/functions_eval_f.html +0 -3
  220. package/SVF-doxygen/html/html/functions_f.html +19 -24
  221. package/SVF-doxygen/html/html/functions_func.html +6 -25
  222. package/SVF-doxygen/html/html/functions_func_0x7e.html +0 -6
  223. package/SVF-doxygen/html/html/functions_func_b.html +1 -5
  224. package/SVF-doxygen/html/html/functions_func_c.html +20 -37
  225. package/SVF-doxygen/html/html/functions_func_d.html +0 -6
  226. package/SVF-doxygen/html/html/functions_func_e.html +2 -3
  227. package/SVF-doxygen/html/html/functions_func_f.html +1 -5
  228. package/SVF-doxygen/html/html/functions_func_g.html +8 -48
  229. package/SVF-doxygen/html/html/functions_func_i.html +10 -17
  230. package/SVF-doxygen/html/html/functions_func_p.html +2 -16
  231. package/SVF-doxygen/html/html/functions_func_s.html +6 -19
  232. package/SVF-doxygen/html/html/functions_func_t.html +0 -6
  233. package/SVF-doxygen/html/html/functions_func_u.html +0 -4
  234. package/SVF-doxygen/html/html/functions_func_v.html +0 -3
  235. package/SVF-doxygen/html/html/functions_g.html +12 -55
  236. package/SVF-doxygen/html/html/functions_i.html +13 -20
  237. package/SVF-doxygen/html/html/functions_l.html +8 -14
  238. package/SVF-doxygen/html/html/functions_m.html +0 -6
  239. package/SVF-doxygen/html/html/functions_n.html +0 -36
  240. package/SVF-doxygen/html/html/functions_o.html +12 -20
  241. package/SVF-doxygen/html/html/functions_p.html +6 -28
  242. package/SVF-doxygen/html/html/functions_r.html +4 -2
  243. package/SVF-doxygen/html/html/functions_s.html +13 -29
  244. package/SVF-doxygen/html/html/functions_t.html +6 -18
  245. package/SVF-doxygen/html/html/functions_u.html +2 -9
  246. package/SVF-doxygen/html/html/functions_v.html +1 -4
  247. package/SVF-doxygen/html/html/functions_vars_a.html +0 -3
  248. package/SVF-doxygen/html/html/functions_vars_c.html +0 -6
  249. package/SVF-doxygen/html/html/functions_vars_d.html +0 -6
  250. package/SVF-doxygen/html/html/functions_vars_g.html +0 -3
  251. package/SVF-doxygen/html/html/functions_vars_l.html +0 -6
  252. package/SVF-doxygen/html/html/functions_vars_m.html +0 -6
  253. package/SVF-doxygen/html/html/functions_vars_n.html +0 -36
  254. package/SVF-doxygen/html/html/functions_vars_o.html +0 -12
  255. package/SVF-doxygen/html/html/functions_vars_p.html +0 -4
  256. package/SVF-doxygen/html/html/functions_vars_s.html +0 -3
  257. package/SVF-doxygen/html/html/functions_vars_t.html +0 -6
  258. package/SVF-doxygen/html/html/functions_vars_u.html +0 -3
  259. package/SVF-doxygen/html/html/functions_w.html +10 -6
  260. package/SVF-doxygen/html/html/globals_defs_j.html +6 -0
  261. package/SVF-doxygen/html/html/globals_func_g.html +0 -3
  262. package/SVF-doxygen/html/html/globals_func_i.html +2 -7
  263. package/SVF-doxygen/html/html/globals_g.html +2 -5
  264. package/SVF-doxygen/html/html/globals_i.html +4 -7
  265. package/SVF-doxygen/html/html/globals_j.html +6 -0
  266. package/SVF-doxygen/html/html/globals_s.html +3 -3
  267. package/SVF-doxygen/html/html/hierarchy.html +13 -19
  268. package/SVF-doxygen/html/html/namespaceSVF.html +0 -10
  269. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +36 -38
  270. package/SVF-doxygen/html/html/search/all_1.js +1 -8
  271. package/SVF-doxygen/html/html/search/all_10.js +18 -20
  272. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  273. package/SVF-doxygen/html/html/search/all_13.js +13 -18
  274. package/SVF-doxygen/html/html/search/all_14.js +8 -12
  275. package/SVF-doxygen/html/html/search/all_15.js +4 -5
  276. package/SVF-doxygen/html/html/search/all_16.js +1 -2
  277. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  278. package/SVF-doxygen/html/html/search/all_1b.js +0 -2
  279. package/SVF-doxygen/html/html/search/all_2.js +0 -1
  280. package/SVF-doxygen/html/html/search/all_3.js +2 -11
  281. package/SVF-doxygen/html/html/search/all_4.js +0 -4
  282. package/SVF-doxygen/html/html/search/all_5.js +2 -2
  283. package/SVF-doxygen/html/html/search/all_6.js +2 -6
  284. package/SVF-doxygen/html/html/search/all_7.js +3 -16
  285. package/SVF-doxygen/html/html/search/all_9.js +5 -7
  286. package/SVF-doxygen/html/html/search/all_a.js +2 -0
  287. package/SVF-doxygen/html/html/search/all_c.js +4 -6
  288. package/SVF-doxygen/html/html/search/all_d.js +4 -6
  289. package/SVF-doxygen/html/html/search/all_e.js +2 -14
  290. package/SVF-doxygen/html/html/search/all_f.js +2 -6
  291. package/SVF-doxygen/html/html/search/classes_10.js +1 -2
  292. package/SVF-doxygen/html/html/search/classes_2.js +0 -3
  293. package/SVF-doxygen/html/html/search/classes_5.js +0 -1
  294. package/SVF-doxygen/html/html/search/defines_8.js +2 -0
  295. package/SVF-doxygen/html/html/search/enumvalues_2.js +0 -3
  296. package/SVF-doxygen/html/html/search/enumvalues_5.js +0 -1
  297. package/SVF-doxygen/html/html/search/files_5.js +0 -2
  298. package/SVF-doxygen/html/html/search/files_e.js +1 -3
  299. package/SVF-doxygen/html/html/search/functions_0.js +1 -7
  300. package/SVF-doxygen/html/html/search/functions_1.js +0 -1
  301. package/SVF-doxygen/html/html/search/functions_11.js +2 -6
  302. package/SVF-doxygen/html/html/search/functions_12.js +2 -3
  303. package/SVF-doxygen/html/html/search/functions_13.js +4 -4
  304. package/SVF-doxygen/html/html/search/functions_14.js +0 -1
  305. package/SVF-doxygen/html/html/search/functions_17.js +0 -2
  306. package/SVF-doxygen/html/html/search/functions_2.js +2 -6
  307. package/SVF-doxygen/html/html/search/functions_3.js +0 -2
  308. package/SVF-doxygen/html/html/search/functions_4.js +1 -1
  309. package/SVF-doxygen/html/html/search/functions_5.js +1 -2
  310. package/SVF-doxygen/html/html/search/functions_6.js +3 -15
  311. package/SVF-doxygen/html/html/search/functions_8.js +5 -7
  312. package/SVF-doxygen/html/html/search/functions_f.js +12 -13
  313. package/SVF-doxygen/html/html/search/variables_1.js +0 -1
  314. package/SVF-doxygen/html/html/search/variables_10.js +1 -2
  315. package/SVF-doxygen/html/html/search/variables_13.js +0 -1
  316. package/SVF-doxygen/html/html/search/variables_14.js +4 -6
  317. package/SVF-doxygen/html/html/search/variables_15.js +0 -1
  318. package/SVF-doxygen/html/html/search/variables_3.js +0 -2
  319. package/SVF-doxygen/html/html/search/variables_4.js +0 -2
  320. package/SVF-doxygen/html/html/search/variables_5.js +1 -1
  321. package/SVF-doxygen/html/html/search/variables_7.js +0 -1
  322. package/SVF-doxygen/html/html/search/variables_c.js +1 -3
  323. package/SVF-doxygen/html/html/search/variables_d.js +1 -3
  324. package/SVF-doxygen/html/html/search/variables_e.js +1 -13
  325. package/SVF-doxygen/html/html/search/variables_f.js +0 -4
  326. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  327. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +3 -3
  328. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  329. package/SVF-doxygen/html/html/svf-ex_8cpp.html +4 -4
  330. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +4 -4
  331. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  332. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  333. package/build.sh +1 -28
  334. package/include/MemoryModel/PointerAnalysis.h +0 -1
  335. package/include/MemoryModel/SVFVariables.h +11 -140
  336. package/include/SVF-FE/LLVMModule.h +0 -24
  337. package/include/Util/ExtAPI.h +59 -42
  338. package/include/Util/Options.h +0 -7
  339. package/include/WPA/FlowSensitive.h +0 -4
  340. package/lib/MemoryModel/PointerAnalysis.cpp +4 -22
  341. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  342. package/lib/MemoryModel/SVFVariables.cpp +1 -28
  343. package/lib/SVF-FE/CPPUtil.cpp +0 -7
  344. package/lib/SVF-FE/SVFIRBuilder.cpp +2 -2
  345. package/lib/SVF-FE/SymbolTableBuilder.cpp +4 -0
  346. package/lib/Util/ExtAPI.cpp +34 -2
  347. package/lib/Util/ExtAPI.json +3268 -2585
  348. package/lib/Util/Options.cpp +0 -24
  349. package/lib/WPA/FlowSensitive.cpp +1 -75
  350. package/lib/WPA/WPAPass.cpp +0 -4
  351. package/package.json +1 -1
  352. package/include/WPA/FlowSensitiveTBHC.h +0 -122
  353. package/include/WPA/TypeBasedHeapCloning.h +0 -188
  354. package/lib/WPA/FlowSensitiveTBHC.cpp +0 -695
  355. package/lib/WPA/TypeBasedHeapCloning.cpp +0 -795
@@ -58,7 +58,6 @@ public:
58
58
  /// GepValNode: tempory gep obj node for field sensitivity
59
59
  /// FIObjNode: for field insensitive analysis
60
60
  /// DummyValNode and DummyObjNode: for non-llvm-value node
61
- /// Clone*Node: objects created by TBHC.
62
61
  enum PNODEK
63
62
  {
64
63
  ValNode,
@@ -70,9 +69,6 @@ public:
70
69
  FIObjNode,
71
70
  DummyValNode,
72
71
  DummyObjNode,
73
- CloneGepObjNode, // NOTE: only used for TBHC.
74
- CloneFIObjNode, // NOTE: only used for TBHC.
75
- CloneDummyObjNode // NOTE: only used for TBHC.
76
72
  };
77
73
 
78
74
 
@@ -327,20 +323,14 @@ public:
327
323
  return node->getNodeKind() == SVFVar::ObjNode ||
328
324
  node->getNodeKind() == SVFVar::GepObjNode ||
329
325
  node->getNodeKind() == SVFVar::FIObjNode ||
330
- node->getNodeKind() == SVFVar::DummyObjNode ||
331
- node->getNodeKind() == SVFVar::CloneGepObjNode ||
332
- node->getNodeKind() == SVFVar::CloneFIObjNode ||
333
- node->getNodeKind() == SVFVar::CloneDummyObjNode;
326
+ node->getNodeKind() == SVFVar::DummyObjNode;
334
327
  }
335
328
  static inline bool classof(const GenericPAGNodeTy *node)
336
329
  {
337
330
  return node->getNodeKind() == SVFVar::ObjNode ||
338
331
  node->getNodeKind() == SVFVar::GepObjNode ||
339
332
  node->getNodeKind() == SVFVar::FIObjNode ||
340
- node->getNodeKind() == SVFVar::DummyObjNode ||
341
- node->getNodeKind() == SVFVar::CloneGepObjNode ||
342
- node->getNodeKind() == SVFVar::CloneFIObjNode ||
343
- node->getNodeKind() == SVFVar::CloneDummyObjNode;
333
+ node->getNodeKind() == SVFVar::DummyObjNode;
344
334
  }
345
335
  //@}
346
336
 
@@ -448,18 +438,15 @@ public:
448
438
  }
449
439
  static inline bool classof(const ObjVar * node)
450
440
  {
451
- return node->getNodeKind() == SVFVar::GepObjNode
452
- || node->getNodeKind() == SVFVar::CloneGepObjNode;
441
+ return node->getNodeKind() == SVFVar::GepObjNode;
453
442
  }
454
443
  static inline bool classof(const SVFVar *node)
455
444
  {
456
- return node->getNodeKind() == SVFVar::GepObjNode
457
- || node->getNodeKind() == SVFVar::CloneGepObjNode;
445
+ return node->getNodeKind() == SVFVar::GepObjNode;
458
446
  }
459
447
  static inline bool classof(const GenericPAGNodeTy *node)
460
448
  {
461
- return node->getNodeKind() == SVFVar::GepObjNode
462
- || node->getNodeKind() == SVFVar::CloneGepObjNode;
449
+ return node->getNodeKind() == SVFVar::GepObjNode;
463
450
  }
464
451
  //@}
465
452
 
@@ -527,18 +514,15 @@ public:
527
514
  }
528
515
  static inline bool classof(const ObjVar * node)
529
516
  {
530
- return node->getNodeKind() == SVFVar::FIObjNode
531
- || node->getNodeKind() == SVFVar::CloneFIObjNode;
517
+ return node->getNodeKind() == SVFVar::FIObjNode;
532
518
  }
533
519
  static inline bool classof(const SVFVar *node)
534
520
  {
535
- return node->getNodeKind() == SVFVar::FIObjNode
536
- || node->getNodeKind() == SVFVar::CloneFIObjNode;
521
+ return node->getNodeKind() == SVFVar::FIObjNode;
537
522
  }
538
523
  static inline bool classof(const GenericPAGNodeTy *node)
539
524
  {
540
- return node->getNodeKind() == SVFVar::FIObjNode
541
- || node->getNodeKind() == SVFVar::CloneFIObjNode;
525
+ return node->getNodeKind() == SVFVar::FIObjNode;
542
526
  }
543
527
  //@}
544
528
 
@@ -705,18 +689,15 @@ public:
705
689
  }
706
690
  static inline bool classof(const SVFVar *node)
707
691
  {
708
- return node->getNodeKind() == SVFVar::DummyObjNode
709
- || node->getNodeKind() == SVFVar::CloneDummyObjNode;
692
+ return node->getNodeKind() == SVFVar::DummyObjNode;
710
693
  }
711
694
  static inline bool classof(const ObjVar *node)
712
695
  {
713
- return node->getNodeKind() == SVFVar::DummyObjNode
714
- || node->getNodeKind() == SVFVar::CloneDummyObjNode;
696
+ return node->getNodeKind() == SVFVar::DummyObjNode;
715
697
  }
716
698
  static inline bool classof(const GenericPAGNodeTy *node)
717
699
  {
718
- return node->getNodeKind() == SVFVar::DummyObjNode
719
- || node->getNodeKind() == SVFVar::CloneDummyObjNode;
700
+ return node->getNodeKind() == SVFVar::DummyObjNode;
720
701
  }
721
702
  //@}
722
703
 
@@ -735,116 +716,6 @@ public:
735
716
  virtual const std::string toString() const;
736
717
  };
737
718
 
738
- /*
739
- * Clone object node for dummy objects.
740
- */
741
- class CloneDummyObjVar: public DummyObjVar
742
- {
743
- public:
744
- //@{ Methods to support type inquiry through isa, cast, and dyn_cast:
745
- static inline bool classof(const CloneDummyObjVar *)
746
- {
747
- return true;
748
- }
749
- static inline bool classof(const SVFVar *node)
750
- {
751
- return node->getNodeKind() == SVFVar::CloneDummyObjNode;
752
- }
753
- static inline bool classof(const GenericPAGNodeTy *node)
754
- {
755
- return node->getNodeKind() == SVFVar::CloneDummyObjNode;
756
- }
757
- //@}
758
-
759
- /// Constructor
760
- CloneDummyObjVar(NodeID i, const MemObj* m, PNODEK ty = CloneDummyObjNode)
761
- : DummyObjVar(i, m, ty)
762
- {
763
- }
764
-
765
- /// Return name of this node
766
- inline const std::string getValueName() const
767
- {
768
- return "clone of " + ObjVar::getValueName();
769
- }
770
-
771
- virtual const std::string toString() const;
772
- };
773
-
774
- /*
775
- * Clone object for GEP objects.
776
- */
777
- class CloneGepObjVar : public GepObjVar
778
- {
779
- public:
780
- //@{ Methods to support type inquiry through isa, cast, and dyn_cast:
781
- static inline bool classof(const CloneGepObjVar *)
782
- {
783
- return true;
784
- }
785
- static inline bool classof(const SVFVar *node)
786
- {
787
- return node->getNodeKind() == SVFVar::CloneGepObjNode;
788
- }
789
- static inline bool classof(const GenericPAGNodeTy *node)
790
- {
791
- return node->getNodeKind() == SVFVar::CloneGepObjNode;
792
- }
793
- //@}
794
-
795
- /// Constructor
796
- CloneGepObjVar(const MemObj* mem, NodeID i, const LocationSet& l, PNODEK ty = CloneGepObjNode) :
797
- GepObjVar(mem, i, l, ty)
798
- {
799
- }
800
-
801
- /// Return name of this node
802
- inline const std::string getValueName() const
803
- {
804
- return "clone (gep) of " + GepObjVar::getValueName();
805
- }
806
-
807
- virtual const std::string toString() const;
808
- };
809
-
810
- /*
811
- * Clone object for FI objects.
812
- */
813
- class CloneFIObjVar : public FIObjVar
814
- {
815
- public:
816
- //@{ Methods to support type inquiry through isa, cast, and dyn_cast:
817
- static inline bool classof(const CloneFIObjVar *)
818
- {
819
- return true;
820
- }
821
- static inline bool classof(const SVFVar *node)
822
- {
823
- return node->getNodeKind() == SVFVar::CloneFIObjNode;
824
- }
825
- static inline bool classof(const GenericPAGNodeTy *node)
826
- {
827
- return node->getNodeKind() == SVFVar::CloneFIObjNode;
828
- }
829
- //@}
830
-
831
- /// Constructor
832
- CloneFIObjVar(const Value* val, NodeID i, const MemObj* mem, PNODEK ty = CloneFIObjNode) :
833
- FIObjVar(val, i, mem, ty)
834
- {
835
- }
836
-
837
- /// Return name of this node
838
- inline const std::string getValueName() const
839
- {
840
- return "clone (FI) of " + FIObjVar::getValueName();
841
- }
842
-
843
- virtual const std::string toString() const;
844
- };
845
-
846
719
  } // End namespace SVF
847
720
 
848
-
849
-
850
721
  #endif /* OBJECTANDSYMBOL_H_ */
@@ -208,30 +208,6 @@ public:
208
208
  return getModuleNum() == 0;
209
209
  }
210
210
 
211
- /// Returns true if all LLVM modules are compiled with ctir.
212
- bool allCTir(void) const
213
- {
214
- // Iterate over all modules. If a single module does not have the correct ctir module flag,
215
- // short-circuit and return false.
216
- for (u32_t i = 0; i < getModuleNum(); ++i)
217
- {
218
- llvm::Metadata *ctirModuleFlag = llvmModuleSet->getModule(i)->getModuleFlag(cppUtil::ctir::derefMDName);
219
- if (ctirModuleFlag == nullptr)
220
- {
221
- return false;
222
- }
223
-
224
- llvm::ConstantAsMetadata *flagConstMetadata = SVFUtil::dyn_cast<llvm::ConstantAsMetadata>(ctirModuleFlag);
225
- ConstantInt *flagConstInt = SVFUtil::dyn_cast<ConstantInt>(flagConstMetadata->getValue());
226
- if (flagConstInt->getZExtValue() != cppUtil::ctir::moduleFlagValue)
227
- {
228
- return false;
229
- }
230
- }
231
-
232
- return true;
233
- }
234
-
235
211
  private:
236
212
  void loadModules(const std::vector<std::string> &moduleNameVec);
237
213
  void addSVFMain();
@@ -40,54 +40,66 @@
40
40
  #include <map>
41
41
 
42
42
  #define EXTAPI_JSON_PATH "/lib/Util/ExtAPI.json"
43
+ #define JSON_OPT_OVERWRITE "overwrite_app_function"
44
+ #define JSON_OPT_FUNCTIONTYPE "type"
43
45
 
44
46
  namespace SVF
45
47
  {
46
48
 
47
49
  /*
48
50
 
49
- Specifications in ExtAPI.json
50
-
51
- Specification language: The specification language of external function includes:
52
- 1. the name of the function,
53
- 2. the type of the function,
54
- 3. the operations of the function.
55
-
56
- Funtion type: Funtion type represents some property of the function.
57
- For example,
58
- ”EFT_ALLOC“, represents if this external function allocates a new object and assigns it to one of its arguments,
59
- For the selection of Function type and a more detailed explanation, please refer to enum extf_t in ExtAPI.h.
60
-
61
- Function operations: Function operations indicates the relationship between input and output,
62
- mainly the relationship between function parameters, or between parameters and return values after function is executed.
63
- For example,
64
- "copy": ["A2", "L"], indicates that after this external function is executed, the value of the 2th parameter is copied into the return value.
65
- For the selection of Function type and a more detailed explanation, please refer to enum extType in ExtAPI.h.
66
-
67
- For operands of function operation, e.g., "A2", "L", there are the following options:
68
- "A": represents an parameter;
69
- "N": represents a number;
70
- "R": represents a reference;
71
- "L": represents a return value;
72
- "V": represents a dummy node;
73
-
74
- Among them, parameter may have multiple forms, because there may be multiple parameters, and parameter may be a reference or complex structure,
75
-
76
- Here we use regular expressions "(AN)(R|RN)^*" to represent parameter, for example,
77
- "A0": represents the 1th parameter;
78
- "A2R": represents that the 3th parameter is a reference;
79
- "A1R2": represents the 3th substructure of 2th parameter "A1R", where "A1R" is a complex structure;
80
- "A2R3R": represents the 4th substructure of 3th parameter "A2R" is a reference, where "A2R" is a complex structure;
81
-
82
-
83
- Specification format:
84
- "functionName": {
85
- "type": "functional type",
86
- "function operation_1": [ operand_1, operand_2, ... , operand_n],
87
- "function operation_2": [ operand_1, operand_2, ... , operand_n],
88
- ...
89
- "function operation_n": [ operand_1, operand_2, ... , operand_n]
90
- }
51
+ ** Specifications in ExtAPI.json
52
+
53
+ *** [1] Overview of the Specification Language
54
+ The specification language of external functions is based on the JSON format. And every function defined by the Specification Language is an object that represents the specification rules. These Specification Language objects for functions contain four parts:
55
+ 1. the name of the function,
56
+ 2. the switch that controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code,
57
+ 3. the type of the function,
58
+ 4. the operations conducted by the function.
59
+
60
+ *** [2] Overwriting the user-defined functions
61
+ The switch *overwrite_app_function* controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code (e.g., CPP files). When the switch *overwrite_app_function* is set to a value of 1, SVF will use the specification rules in ExtAPI.json to conduct the analysis and ignore the user-defined functions in the input CPP/bc files.
62
+ overwrite_app_function = 0: Analyze the user-defined functions.
63
+ overwrite_app_function = 1: Use specifications in ExtAPI.json to overwrite the user-defined functions.
64
+
65
+ *** [3] Function types
66
+ Function type represents the properties of the function.
67
+ For example,
68
+ "EFT_ALLOC" represents if this external function allocates a new object and assigns it to one of its arguments,
69
+ For the selection of function type and a more detailed explanation, please refer to the definition of enum *extf_t* in ExtAPI.h.
70
+
71
+ *** [4] Function operations
72
+ Function operations indicate the relationships between input and output,
73
+ mainly between function parameters or between parameters and return values after the execution.
74
+ For example,
75
+ "copy": ["A2", "L"] indicates that after this external function is executed, the value of the 2nd parameter is copied into the return value.
76
+ For the selection of function type and a more detailed explanation, please refer to the definition of enum *extType* in ExtAPI.h.
77
+
78
+ For operands of function operation, e.g., "A2", "L", there are the following options:
79
+ "A": represents a parameter;
80
+ "N": represents a number;
81
+ "R": represents a reference;
82
+ "L": represents a return value;
83
+ "V": represents a dummy node;
84
+
85
+ Among them, a parameter may have multiple forms because there may be various parameters, and the parameter may be a reference or complex structure,
86
+
87
+ Here we use regular expressions "(AN)(R|RN)^*" to represent parameters, for example,
88
+ "A0": represents the 1st parameter;
89
+ "A2R": represents that the 3rd parameter is a reference;
90
+ "A1R2": represents the 3rd substructure of the 2nd parameter "A1R", where "A1R" is a complex structure;
91
+ "A2R3R": represents the 4th substructure of the 3rd parameter "A2R" is a reference, where "A2R" is a complex structure;
92
+
93
+
94
+ ** Specification format:
95
+ "functionName": {
96
+ "type": "functional type",
97
+ "overwrite_app_function:" 0/1,
98
+ "function operation_1": [ operand_1, operand_2, ... , operand_n],
99
+ "function operation_2": [ operand_1, operand_2, ... , operand_n],
100
+ ...
101
+ "function operation_n": [ operand_1, operand_2, ... , operand_n]
102
+ }
91
103
  */
92
104
 
93
105
 
@@ -233,6 +245,11 @@ public:
233
245
  // Get property of the operation, e.g. "EFT_A1R_A0R"
234
246
  extType get_type(const SVF::SVFFunction *callee);
235
247
 
248
+ // Get priority of he function, return value
249
+ // 0: Apply user-defined functions
250
+ // 1: Apply function specification in ExtAPI.json
251
+ u32_t isOverwrittenAppFunction(const SVF::SVFFunction *callee);
252
+
236
253
  // Does (F) have a static var X (unavailable to us) that its return points to?
237
254
  bool has_static(const SVFFunction *F);
238
255
 
@@ -237,13 +237,6 @@ public:
237
237
  static const llvm::cl::opt<bool> PtsDiff;
238
238
  static const llvm::cl::opt<bool> MergePWC;
239
239
 
240
- // FlowSensitive.cpp
241
- static const llvm::cl::opt<bool> CTirAliasEval;
242
-
243
- //FlowSensitiveTBHC.cpp
244
- static const llvm::cl::opt<bool> TBHCStoreReuse;
245
- static const llvm::cl::opt<bool> TBHCAllReuse;
246
-
247
240
  // WPAPass.cpp
248
241
  static const llvm::cl::opt<bool> AnderSVFG;
249
242
  static const llvm::cl::opt<bool> SABERFULLSVFG;
@@ -240,10 +240,6 @@ protected:
240
240
  /// Return TRUE if this is a strong update STORE statement.
241
241
  bool isStrongUpdate(const SVFGNode* node, NodeID& singleton);
242
242
 
243
- /// Prints some easily parseable stats on aliasing of relevant CTir TL PTS.
244
- /// Format: eval-ctir-aliases #TOTAL_TESTS #MAY_ALIAS #NO_ALIAS
245
- virtual void printCTirAliasStats(void);
246
-
247
243
  /// Fills may/noAliases for the location/pointer pairs in cmp.
248
244
  virtual void countAliases(Set<std::pair<NodeID, NodeID>> cmp, unsigned *mayAliases, unsigned *noAliases);
249
245
 
@@ -42,7 +42,6 @@
42
42
  #include "MemoryModel/PTAStat.h"
43
43
  #include "Graphs/ThreadCallGraph.h"
44
44
  #include "Graphs/ICFG.h"
45
- #include "WPA/FlowSensitiveTBHC.h"
46
45
 
47
46
  #include <iomanip>
48
47
  #include <iostream>
@@ -117,20 +116,10 @@ void PointerAnalysis::initialize()
117
116
  assert(pag && "SVFIR has not been built!");
118
117
  if (chgraph == nullptr)
119
118
  {
120
- if (LLVMModuleSet::getLLVMModuleSet()->allCTir())
121
- {
122
- DCHGraph *dchg = new DCHGraph(pag->getModule());
123
- // TODO: we might want to have an option for extending.
124
- dchg->buildCHG(true);
125
- chgraph = dchg;
126
- }
127
- else
128
- {
129
- CHGraph *chg = new CHGraph(pag->getModule());
130
- CHGBuilder builder(chg);
131
- builder.buildCHG();
132
- chgraph = chg;
133
- }
119
+ CHGraph *chg = new CHGraph(pag->getModule());
120
+ CHGBuilder builder(chg);
121
+ builder.buildCHG();
122
+ chgraph = chg;
134
123
  }
135
124
 
136
125
  svfMod = pag->getModule();
@@ -209,8 +198,6 @@ void PointerAnalysis::finalize()
209
198
  /// Print statistics
210
199
  dumpStat();
211
200
 
212
- SVFIR* pag = SVFIR::getPAG();
213
-
214
201
  /// Dump results
215
202
  if (Options::PTSPrint)
216
203
  {
@@ -233,11 +220,6 @@ void PointerAnalysis::finalize()
233
220
  if (Options::CallGraphDotGraph)
234
221
  getPTACallGraph()->dump("callgraph_final");
235
222
 
236
- // FSTBHC has its own TBHC-specific test validation.
237
- if(!pag->isBuiltFromFile() && alias_validation
238
- && !SVFUtil::isa<FlowSensitiveTBHC>(this))
239
- validateTests();
240
-
241
223
  if (!Options::UsePreCompFieldSensitive)
242
224
  resetObjFieldSensitive();
243
225
  }
@@ -43,7 +43,7 @@ BVDataPTAImpl::BVDataPTAImpl(SVFIR* p, PointerAnalysis::PTATY type, bool alias_c
43
43
  else if (Options::ptDataBacking == PTBackingType::Persistent) ptD = new PersDiffPTDataTy(getPtCache(), false);
44
44
  else assert(false && "BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!");
45
45
  }
46
- else if (type == FSSPARSE_WPA || type == FSTBHC_WPA)
46
+ else if (type == FSSPARSE_WPA)
47
47
  {
48
48
  if (Options::INCDFPTData)
49
49
  {
@@ -41,7 +41,7 @@ using namespace SVFUtil;
41
41
  SVFVar::SVFVar(const Value* val, NodeID i, PNODEK k) :
42
42
  GenericPAGNodeTy(i,k), value(val)
43
43
  {
44
- assert( ValNode <= k && k <= CloneDummyObjNode && "new SVFIR node kind?");
44
+ assert( ValNode <= k && k <= DummyObjNode && "new SVFIR node kind?");
45
45
  switch (k)
46
46
  {
47
47
  case ValNode:
@@ -67,9 +67,6 @@ SVFVar::SVFVar(const Value* val, NodeID i, PNODEK k) :
67
67
  case GepObjNode:
68
68
  case FIObjNode:
69
69
  case DummyObjNode:
70
- case CloneGepObjNode:
71
- case CloneFIObjNode:
72
- case CloneDummyObjNode:
73
70
  {
74
71
  isPtr = true;
75
72
  if(val)
@@ -202,30 +199,6 @@ const std::string DummyObjVar::toString() const
202
199
  return rawstr.str();
203
200
  }
204
201
 
205
- const std::string CloneDummyObjVar::toString() const
206
- {
207
- std::string str;
208
- raw_string_ostream rawstr(str);
209
- rawstr << "CloneDummyObjVar ID: " << getId();
210
- return rawstr.str();
211
- }
212
-
213
- const std::string CloneGepObjVar::toString() const
214
- {
215
- std::string str;
216
- raw_string_ostream rawstr(str);
217
- rawstr << "CloneGepObjVar ID: " << getId();
218
- return rawstr.str();
219
- }
220
-
221
- const std::string CloneFIObjVar::toString() const
222
- {
223
- std::string str;
224
- raw_string_ostream rawstr(str);
225
- rawstr << "CloneFIObjVar ID: " << getId();
226
- return rawstr.str();
227
- }
228
-
229
202
  /// Whether it is constant data, i.e., "0", "1.001", "str"
230
203
  /// or llvm's metadata, i.e., metadata !4087
231
204
  bool SVFVar::isConstantData() const
@@ -263,13 +263,6 @@ bool cppUtil::isVirtualCallSite(CallSite cs)
263
263
  if (cs.getCalledFunction() != nullptr || cs.arg_empty())
264
264
  return false;
265
265
 
266
- // When compiled with ctir, we'd be using the DCHG which has its own
267
- // virtual annotations.
268
- if (LLVMModuleSet::getLLVMModuleSet()->allCTir())
269
- {
270
- return cs.getInstruction()->getMetadata(cppUtil::ctir::derefMDName) != nullptr;
271
- }
272
-
273
266
  const Value *vfunc = cs.getCalledValue();
274
267
  if (const LoadInst *vfuncloadinst = SVFUtil::dyn_cast<LoadInst>(vfunc))
275
268
  {
@@ -1207,9 +1207,9 @@ void SVFIRBuilder::handleExtCall(CallSite cs, const SVFFunction *callee)
1207
1207
  // The external function exists in ExtAPI.json
1208
1208
  if (item != nullptr)
1209
1209
  {
1210
- // Get the first operation of the function
1211
1210
  cJSON *obj = item->child;
1212
- obj = obj -> next;
1211
+ // Get the first operation of the function
1212
+ obj = obj -> next -> next;
1213
1213
  while (obj)
1214
1214
  {
1215
1215
  std::string op = obj->string;
@@ -114,6 +114,10 @@ void SymbolTableBuilder::buildMemModel(SVFModule* svfModule)
114
114
  {
115
115
  collectSym(ld->getPointerOperand());
116
116
  }
117
+ else if (const AllocaInst *alloc = SVFUtil::dyn_cast<AllocaInst>(inst))
118
+ {
119
+ collectSym(alloc->getArraySize());
120
+ }
117
121
  else if (const PHINode *phi = SVFUtil::dyn_cast<PHINode>(inst))
118
122
  {
119
123
  for (u32_t i = 0; i < phi->getNumIncomingValues(); ++i)
@@ -138,7 +138,7 @@ ExtAPI::extType ExtAPI::get_type(const SVF::SVFFunction *F)
138
138
  {
139
139
  // Get the first operation of the function
140
140
  cJSON *obj = item->child;
141
- if (strcmp(obj->string, "type") == 0)
141
+ if (strcmp(obj->string, JSON_OPT_FUNCTIONTYPE) == 0)
142
142
  type = obj->valuestring;
143
143
  else
144
144
  assert(false && "The function operation format is illegal!");
@@ -150,6 +150,25 @@ ExtAPI::extType ExtAPI::get_type(const SVF::SVFFunction *F)
150
150
  return it->second;
151
151
  }
152
152
 
153
+ // Get priority of he function, return value
154
+ // 0: Apply user-defined functions
155
+ // 1: Apply function specification in ExtAPI.json
156
+ u32_t ExtAPI::isOverwrittenAppFunction(const SVF::SVFFunction *callee)
157
+ {
158
+ std::string funName = get_name(callee);
159
+ cJSON *item = get_FunJson(funName);
160
+ if (item != nullptr)
161
+ {
162
+ cJSON *obj = item->child;
163
+ obj = obj->next;
164
+ if (strcmp(obj->string, JSON_OPT_OVERWRITE) == 0)
165
+ return obj->valueint;
166
+ else
167
+ assert(false && "The function operation format is illegal!");
168
+ }
169
+ return 0;
170
+ }
171
+
153
172
  // Does (F) have a static var X (unavailable to us) that its return points to?
154
173
  bool ExtAPI::has_static(const SVFFunction *F)
155
174
  {
@@ -240,7 +259,20 @@ bool ExtAPI::is_ext(const SVFFunction *F)
240
259
  else
241
260
  {
242
261
  ExtAPI::extType t = get_type(F);
243
- res = t == EFT_ALLOC || t == EFT_REALLOC || t == EFT_NOSTRUCT_ALLOC || t == EFT_NOOP || t == EFT_FREE;
262
+ if (t != EFT_NULL)
263
+ {
264
+ u32_t overwrittenAppFunction = isOverwrittenAppFunction(F);
265
+ // overwrittenAppFunction = 1: Execute function specification in ExtAPI.json
266
+ // F is considered as external function
267
+ if (overwrittenAppFunction == 1)
268
+ res = 1;
269
+ // overwrittenAppFunction = 0: Execute user-defined functions
270
+ // F is not considered as external function
271
+ else
272
+ res = 0;
273
+ }
274
+ else
275
+ res = 0;
244
276
  }
245
277
  return res;
246
278
  }