svf-tools 1.0.581 → 1.0.583

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 (286) hide show
  1. package/SVF-doxygen/html/html/AndersenPWC_8h_source.html +1 -2
  2. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -2
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -5
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -5
  5. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +1 -2
  6. package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +32 -30
  7. package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +11 -11
  8. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +11 -11
  9. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +15 -16
  10. package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +10 -10
  11. package/SVF-doxygen/html/html/CFLBase_8h_source.html +11 -9
  12. package/SVF-doxygen/html/html/CFLGramGraphChecker_8h_source.html +3 -3
  13. package/SVF-doxygen/html/html/CFLGrammar_8cpp_source.html +23 -21
  14. package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +70 -66
  15. package/SVF-doxygen/html/html/CFLGrammar_8txt.html +28 -262
  16. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +5 -5
  17. package/SVF-doxygen/html/html/CFLGraphBuilder_8h_source.html +2 -2
  18. package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +10 -10
  19. package/SVF-doxygen/html/html/CFLGraph_8h_source.html +37 -20
  20. package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +22 -19
  21. package/SVF-doxygen/html/html/CFLSolver_8h_source.html +18 -15
  22. package/SVF-doxygen/html/html/CFLStat_8cpp_source.html +10 -10
  23. package/SVF-doxygen/html/html/CFLStat_8h_source.html +8 -11
  24. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -3
  25. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -3
  26. package/SVF-doxygen/html/html/CHG_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/CHG_8h_source.html +1 -1
  28. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +1 -4
  29. package/SVF-doxygen/html/html/CPPUtil_8h.html +4 -4
  30. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +1 -2
  31. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +3 -7
  32. package/SVF-doxygen/html/html/ConsG_8h_source.html +1 -1
  33. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -3
  34. package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
  35. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -4
  36. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +1 -1
  37. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +1 -3
  38. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -2
  39. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +1 -2
  40. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -3
  41. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -2
  42. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +2 -5
  43. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -5
  44. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  45. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +1 -1
  46. package/SVF-doxygen/html/html/GrammarBuilder_8cpp_source.html +4 -4
  47. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -2
  48. package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +1 -2
  49. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
  52. package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
  53. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -2
  54. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -2
  55. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -3
  56. package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -2
  57. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -2
  58. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -2
  59. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -2
  60. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -2
  61. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -2
  62. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -4
  63. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -2
  64. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -2
  65. package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -3
  66. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -3
  67. package/SVF-doxygen/html/html/MemSSA_8h_source.html +1 -3
  68. package/SVF-doxygen/html/html/PCG_8cpp_source.html +1 -2
  69. package/SVF-doxygen/html/html/PEGGrammar_8txt.html +6 -6
  70. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
  71. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -2
  73. package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +1 -3
  74. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +2 -3
  75. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  76. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +1 -3
  77. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +1 -2
  78. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +1 -2
  79. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +1 -2
  80. package/SVF-doxygen/html/html/SVFUtil_8h.html +1 -1
  81. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +1 -2
  82. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -2
  83. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -2
  84. package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +2 -2
  85. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -2
  86. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +1 -2
  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/ThreadAPI_8h_source.html +1 -2
  90. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -1
  91. package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
  92. package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -5
  93. package/SVF-doxygen/html/html/VFG_8h_source.html +3 -6
  94. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -3
  95. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +1 -3
  96. package/SVF-doxygen/html/html/cfl_8cpp_source.html +1 -1
  97. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  98. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +3 -3
  99. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +4 -4
  100. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +4 -4
  101. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +4 -4
  102. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +6 -6
  103. package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +1 -1
  104. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +1 -2
  105. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  106. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  107. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -2
  108. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +58 -56
  109. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +4 -2
  110. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +47 -42
  111. package/SVF-doxygen/html/html/classSVF_1_1CFLBase-members.html +4 -2
  112. package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +79 -26
  113. package/SVF-doxygen/html/html/classSVF_1_1CFLEdge-members.html +19 -18
  114. package/SVF-doxygen/html/html/classSVF_1_1CFLEdge.html +43 -20
  115. package/SVF-doxygen/html/html/classSVF_1_1CFLFIFOWorkList.html +24 -24
  116. package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar-members.html +40 -37
  117. package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar.html +55 -49
  118. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +15 -15
  119. package/SVF-doxygen/html/html/classSVF_1_1CFLNode-members.html +19 -9
  120. package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +379 -20
  121. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver-members.html +12 -9
  122. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +144 -53
  123. package/SVF-doxygen/html/html/classSVF_1_1CFLStat-members.html +31 -32
  124. package/SVF-doxygen/html/html/classSVF_1_1CFLStat.html +50 -78
  125. package/SVF-doxygen/html/html/classSVF_1_1CFLVF-members.html +2 -0
  126. package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +14 -10
  127. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +5 -7
  128. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +1 -2
  129. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  130. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  131. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +8 -17
  132. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +4 -5
  133. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  134. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +2 -2
  135. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +6 -10
  136. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +2 -2
  137. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +13 -14
  138. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +3 -3
  139. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +4 -5
  140. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +6 -10
  141. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +2 -4
  142. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase-members.html +23 -19
  144. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +197 -78
  145. package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder.html +5 -5
  146. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -2
  147. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +2 -2
  148. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +2 -2
  149. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -2
  150. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -2
  152. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -5
  153. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -2
  154. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +5 -8
  155. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +3 -7
  156. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -6
  157. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +3 -6
  158. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -2
  159. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +13 -25
  160. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +1 -1
  161. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +1 -2
  162. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  163. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +1 -2
  164. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  165. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +6 -10
  166. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +3 -3
  167. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +4 -6
  168. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +2 -3
  169. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +2 -3
  170. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -2
  171. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  172. package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +2 -2
  173. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +1 -2
  174. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +1 -2
  176. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  178. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +2 -3
  179. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1VFCFLGraphBuilder.html +1 -1
  181. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +14 -20
  182. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +4 -5
  183. package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +1 -2
  184. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  185. package/SVF-doxygen/html/html/functions.html +0 -3
  186. package/SVF-doxygen/html/html/functions_a.html +14 -4
  187. package/SVF-doxygen/html/html/functions_c.html +38 -30
  188. package/SVF-doxygen/html/html/functions_e.html +4 -1
  189. package/SVF-doxygen/html/html/functions_f.html +6 -6
  190. package/SVF-doxygen/html/html/functions_func.html +16 -6
  191. package/SVF-doxygen/html/html/functions_func_c.html +29 -27
  192. package/SVF-doxygen/html/html/functions_func_g.html +25 -16
  193. package/SVF-doxygen/html/html/functions_func_i.html +8 -4
  194. package/SVF-doxygen/html/html/functions_func_p.html +4 -1
  195. package/SVF-doxygen/html/html/functions_func_r.html +8 -2
  196. package/SVF-doxygen/html/html/functions_func_s.html +12 -9
  197. package/SVF-doxygen/html/html/functions_g.html +23 -14
  198. package/SVF-doxygen/html/html/functions_i.html +20 -13
  199. package/SVF-doxygen/html/html/functions_l.html +5 -5
  200. package/SVF-doxygen/html/html/functions_n.html +9 -4
  201. package/SVF-doxygen/html/html/functions_o.html +21 -10
  202. package/SVF-doxygen/html/html/functions_p.html +16 -17
  203. package/SVF-doxygen/html/html/functions_r.html +7 -1
  204. package/SVF-doxygen/html/html/functions_s.html +8 -5
  205. package/SVF-doxygen/html/html/functions_t.html +3 -3
  206. package/SVF-doxygen/html/html/functions_type_c.html +6 -0
  207. package/SVF-doxygen/html/html/functions_vars.html +0 -3
  208. package/SVF-doxygen/html/html/functions_vars_e.html +3 -0
  209. package/SVF-doxygen/html/html/functions_vars_i.html +3 -0
  210. package/SVF-doxygen/html/html/functions_vars_n.html +6 -1
  211. package/SVF-doxygen/html/html/functions_vars_o.html +3 -0
  212. package/SVF-doxygen/html/html/functions_w.html +11 -11
  213. package/SVF-doxygen/html/html/globals_a.html +0 -4
  214. package/SVF-doxygen/html/html/globals_c.html +7 -8
  215. package/SVF-doxygen/html/html/globals_e.html +1 -2
  216. package/SVF-doxygen/html/html/globals_f.html +4 -8
  217. package/SVF-doxygen/html/html/globals_g.html +4 -8
  218. package/SVF-doxygen/html/html/globals_l.html +2 -8
  219. package/SVF-doxygen/html/html/globals_m.html +1 -4
  220. package/SVF-doxygen/html/html/globals_s.html +3 -6
  221. package/SVF-doxygen/html/html/globals_v.html +1 -4
  222. package/SVF-doxygen/html/html/globals_vars.html +22 -55
  223. package/SVF-doxygen/html/html/menudata.js +0 -1
  224. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  225. package/SVF-doxygen/html/html/namespaceSVF.html +4 -4
  226. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +2 -3
  227. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +9 -15
  228. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  229. package/SVF-doxygen/html/html/search/all_0.js +0 -1
  230. package/SVF-doxygen/html/html/search/all_1.js +6 -3
  231. package/SVF-doxygen/html/html/search/all_10.js +7 -6
  232. package/SVF-doxygen/html/html/search/all_11.js +3 -1
  233. package/SVF-doxygen/html/html/search/all_12.js +10 -9
  234. package/SVF-doxygen/html/html/search/all_13.js +6 -6
  235. package/SVF-doxygen/html/html/search/all_15.js +3 -4
  236. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  237. package/SVF-doxygen/html/html/search/all_3.js +8 -5
  238. package/SVF-doxygen/html/html/search/all_5.js +2 -1
  239. package/SVF-doxygen/html/html/search/all_6.js +3 -4
  240. package/SVF-doxygen/html/html/search/all_7.js +7 -5
  241. package/SVF-doxygen/html/html/search/all_9.js +6 -4
  242. package/SVF-doxygen/html/html/search/all_c.js +4 -5
  243. package/SVF-doxygen/html/html/search/all_d.js +1 -2
  244. package/SVF-doxygen/html/html/search/all_e.js +4 -3
  245. package/SVF-doxygen/html/html/search/all_f.js +3 -2
  246. package/SVF-doxygen/html/html/search/functions_0.js +4 -1
  247. package/SVF-doxygen/html/html/search/functions_10.js +2 -0
  248. package/SVF-doxygen/html/html/search/functions_11.js +1 -0
  249. package/SVF-doxygen/html/html/search/functions_2.js +3 -2
  250. package/SVF-doxygen/html/html/search/functions_6.js +3 -0
  251. package/SVF-doxygen/html/html/search/functions_8.js +2 -1
  252. package/SVF-doxygen/html/html/search/functions_f.js +1 -0
  253. package/SVF-doxygen/html/html/search/typedefs_2.js +2 -0
  254. package/SVF-doxygen/html/html/search/variables_0.js +0 -1
  255. package/SVF-doxygen/html/html/search/variables_1.js +1 -2
  256. package/SVF-doxygen/html/html/search/variables_12.js +1 -2
  257. package/SVF-doxygen/html/html/search/variables_13.js +3 -3
  258. package/SVF-doxygen/html/html/search/variables_15.js +1 -2
  259. package/SVF-doxygen/html/html/search/variables_3.js +1 -1
  260. package/SVF-doxygen/html/html/search/variables_5.js +2 -1
  261. package/SVF-doxygen/html/html/search/variables_6.js +1 -2
  262. package/SVF-doxygen/html/html/search/variables_7.js +4 -5
  263. package/SVF-doxygen/html/html/search/variables_9.js +2 -1
  264. package/SVF-doxygen/html/html/search/variables_c.js +1 -3
  265. package/SVF-doxygen/html/html/search/variables_d.js +0 -1
  266. package/SVF-doxygen/html/html/search/variables_e.js +3 -2
  267. package/SVF-doxygen/html/html/search/variables_f.js +1 -0
  268. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +3 -3
  269. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +4 -4
  270. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CFLNode_01_5_01_4_01_4.html +1 -1
  271. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLGraph_01_5_01_4.html +2 -2
  272. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLNode_01_5_01_4.html +1 -1
  273. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  274. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  275. package/include/CFL/CFLBase.h +2 -0
  276. package/include/CFL/CFLGrammar.h +13 -0
  277. package/include/CFL/CFLGrammar.txt +9 -33
  278. package/include/CFL/CFLSolver.h +8 -0
  279. package/include/CFL/CFLStat.h +3 -13
  280. package/include/Graphs/CFLGraph.h +69 -0
  281. package/lib/CFL/CFGNormalizer.cpp +1 -0
  282. package/lib/CFL/CFLAlias.cpp +5 -0
  283. package/lib/CFL/CFLGrammar.cpp +34 -1
  284. package/lib/CFL/CFLSolver.cpp +58 -45
  285. package/lib/CFL/CFLStat.cpp +20 -66
  286. package/package.json +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">LockResultValidator.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="LockResultValidator_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * LOCKResultValidator.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: 24/07/2021</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVF-FE_2BasicTypes_8h.html">SVF-FE/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LockResultValidator_8h.html">MTA/LockResultValidator.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc"> 16</a></span>&#160;<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> <a class="code" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc">LockResultValidator::getStringArg</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> arg_num)</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; assert(SVFUtil::isa&lt;CallInst&gt;(inst) &amp;&amp; <span class="stringliteral">&quot;getFirstIntArg: inst is not a callinst&quot;</span>);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; assert((arg_num &lt; cs.<a class="code" href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">arg_size</a>()) &amp;&amp; <span class="stringliteral">&quot;Does not has this argument&quot;</span>);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gepinst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>&gt;(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_num));</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* arrayinst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>&gt;(gepinst-&gt;getOperand(0));</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>* cxtarray = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>&gt;(arrayinst-&gt;getOperand(0));</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">if</span> (!cxtarray)</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> strvec;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> strvec;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; }</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> vthdcxtstring = cxtarray-&gt;getAsCString().str();</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">split</a>(vthdcxtstring, <span class="charliteral">&#39;,&#39;</span>);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f"> 33</a></span>&#160;<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> &amp;<a class="code" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f">LockResultValidator::split</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;s, <span class="keywordtype">char</span> delim, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> &amp;elems)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::stringstream ss(s);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">while</span> (std::getline(ss, item, delim))</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; elems.insert(item);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ad26006e14c866d694bc6e2ebaa41ded9"> 44</a></span>&#160;<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> <a class="code" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f">LockResultValidator::split</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;s, <span class="keywordtype">char</span> delim)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> elems;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">split</a>(s, delim, elems);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330"> 51</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330">LockResultValidator::getOutput</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *scenario, <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LOCK_FLAG</a> analysisRes)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> ret(scenario);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; ret += <span class="stringliteral">&quot;\t&quot;</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">switch</span> (analysisRes)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">case</span> LOCK_TRUE:</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;SUCCESS&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">case</span> LOCK_UNSOUND:</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#a054c3e668ce8b265bbc5d923f6243ce7">SVFUtil::bugMsg2</a>(<span class="stringliteral">&quot;UNSOUND&quot;</span>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">case</span> LOCK_IMPRECISE:</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6c66553e2559eebfe4f98c0c7ec4b08">SVFUtil::bugMsg1</a>(<span class="stringliteral">&quot;IMPRECISE&quot;</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">SVFUtil::errMsg</a>(<span class="stringliteral">&quot;FAILURE&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2"> 72</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2">LockResultValidator::collectLockTargets</a>()</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> it = getModule()-&gt;llvmFunBegin(); it != getModule()-&gt;llvmFunEnd(); it++)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> fName = (*it)-&gt;getName().str();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span>(fName.find(LOCK) != std::string::npos)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; F = (*it);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (!F)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">for</span>(Value::const_use_iterator it = F-&gt;use_begin(), ie = F-&gt;use_end(); it!=ie; it++)</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a334998718813a19a7697daf4ba282faf">Use</a> *u = &amp;*it;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *user = u-&gt;getUser();</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&gt;(user);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> y = getStringArg(inst, 0);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* memInst = getPreviousMemoryAccessInst(inst);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; instToCxtLockSet[memInst] = y;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>* <a class="code" href="CFLGrammar_8txt.html#a92d5a256d74eadeb5bfa131b84067f0d">store</a> = SVFUtil::dyn_cast&lt;StoreInst&gt; (memInst))</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">BinaryOperator</a>* bop = SVFUtil::dyn_cast&lt;BinaryOperator&gt; (<a class="code" href="CFLGrammar_8txt.html#a92d5a256d74eadeb5bfa131b84067f0d">store</a>-&gt;getValueOperand()))</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v = bop-&gt;getOperand(0);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>&gt; (v);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; instToCxtLockSet[prevInst] = y;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;}</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9"> 108</a></span>&#160;<a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LockResultValidator::LOCK_FLAG</a> <a class="code" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9">LockResultValidator::validateStmtInLock</a>()</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LockResultValidator::LOCK_FLAG</a> res = <a class="code" href="classSVF_1_1LockResultValidator.html#a005c38dd07eb66d52066fa1927b1e19f">LockResultValidator::LOCK_TRUE</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html#a710aad28484677637367e9098a55c7d7">LockAnalysis::CxtStmtToCxtLockSet</a> analyedLS = _la-&gt;getCSTCLS();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">for</span>(LockAnalysis::CxtStmtToCxtLockSet::iterator it = analyedLS.begin(),</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; eit = analyedLS.end(); it!=eit; it++)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = ((*it).first).getStmt();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span>(!SVFUtil::isa&lt;LoadInst&gt; (inst) &amp;&amp; !SVFUtil::isa&lt;StoreInst&gt; (inst))</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a> = inst-&gt;getParent()-&gt;getParent();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span>(inFilter(F-&gt;getName().str()))</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> LS = instToCxtLockSet[inst];</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span>(LS.size() != (*it).second.size())</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ac609142ee5a0caaf3ac51238ec421c2e">Options::PrintValidRes</a>)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">errMsg</a>(<span class="stringliteral">&quot;\nValidate Stmt&#39;s Lock : Wrong at: &quot;</span>) &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(inst) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Reason: The number of lock on current stmt is wrong\n&quot;</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n----Given locks:\n&quot;</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">for</span> (CxtLockSetStr::iterator it1 = LS.begin(),eit1 = LS.end(); it1 != eit1; it++)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Lock &quot;</span> &lt;&lt; *it1 &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n----Analysis locks:\n&quot;</span>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">for</span> (LockAnalysis::CxtLockSet::iterator it2 = (*it).second.begin(),</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; eit2 = (*it).second.end(); it2 != eit2; ++it)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call = (*it2).getStmt();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lockName = call-&gt;getOperand(0)-&gt;getName().str();</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()&lt;&lt;<span class="stringliteral">&quot;Lock &quot;</span> &lt;&lt; lockName &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; res = <a class="code" href="classSVF_1_1LockResultValidator.html#a03589368482d3f7ee7f6734e257dcbdf">LockResultValidator::LOCK_UNSOUND</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html#a0716c155b42b3ae7a6c8d7593bb6ac83">LockAnalysis::CxtLockSet</a> LSA = (*it).second;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">for</span>(LockAnalysis::CxtLockSet::iterator it3 = LSA.begin(), eit3=LSA.end(); it3!=eit3; it3++)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call = (*it3).getStmt();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lockName = call-&gt;getOperand(0)-&gt;getName().str();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span>(!match(lockName, LS))</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#ac609142ee5a0caaf3ac51238ec421c2e">Options::PrintValidRes</a>)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\nValidate Stmt&#39;s Lock : Wrong at (&quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(inst) &lt;&lt; <span class="stringliteral">&quot;)\n&quot;</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Reason: The number of lock on current stmt is wrong\n&quot;</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n Lock &quot;</span> &lt;&lt; lockName &lt;&lt; <span class="stringliteral">&quot; should not protect current instruction\n&quot;</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; res = <a class="code" href="classSVF_1_1LockResultValidator.html#a760c0f6f891daa4532a44c6594794bb8">LockResultValidator::LOCK_IMPRECISE</a>;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d"> 166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d">LockResultValidator::analyze</a>()</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot; --- Lock Analysis Result Validation ---\n&quot;</span>);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span>(!collectLockTargets())</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> errstring;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; errstring = getOutput(<span class="stringliteral">&quot;Validate Lock Analysis :&quot;</span>, validateStmtInLock());</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;======&quot;</span> &lt;&lt; errstring &lt;&lt; <span class="stringliteral">&quot;======\n&quot;</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;}</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="ttc" id="namespaceSVF_html_a334998718813a19a7697daf4ba282faf"><div class="ttname"><a href="namespaceSVF.html#a334998718813a19a7697daf4ba282faf">SVF::Use</a></div><div class="ttdeci">llvm::Use Use</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00036">BasicTypes.h:36</a></div></div>
69
+ <a href="LockResultValidator_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * LOCKResultValidator.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: 24/07/2021</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVF-FE_2BasicTypes_8h.html">SVF-FE/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LockResultValidator_8h.html">MTA/LockResultValidator.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc"> 16</a></span>&#160;<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> <a class="code" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc">LockResultValidator::getStringArg</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> arg_num)</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; assert(SVFUtil::isa&lt;CallInst&gt;(inst) &amp;&amp; <span class="stringliteral">&quot;getFirstIntArg: inst is not a callinst&quot;</span>);</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; assert((arg_num &lt; cs.<a class="code" href="classSVF_1_1CallSite.html#a145676880fce313b4634d14118476c27">arg_size</a>()) &amp;&amp; <span class="stringliteral">&quot;Does not has this argument&quot;</span>);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gepinst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>&gt;(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_num));</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* arrayinst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>&gt;(gepinst-&gt;getOperand(0));</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>* cxtarray = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>&gt;(arrayinst-&gt;getOperand(0));</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">if</span> (!cxtarray)</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> strvec;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">return</span> strvec;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; }</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> vthdcxtstring = cxtarray-&gt;getAsCString().str();</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">split</a>(vthdcxtstring, <span class="charliteral">&#39;,&#39;</span>);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f"> 33</a></span>&#160;<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> &amp;<a class="code" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f">LockResultValidator::split</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;s, <span class="keywordtype">char</span> delim, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> &amp;elems)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::stringstream ss(s);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">while</span> (std::getline(ss, item, delim))</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; elems.insert(item);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;}</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ad26006e14c866d694bc6e2ebaa41ded9"> 44</a></span>&#160;<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> <a class="code" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f">LockResultValidator::split</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;s, <span class="keywordtype">char</span> delim)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> elems;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">split</a>(s, delim, elems);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330"> 51</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330">LockResultValidator::getOutput</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *scenario, <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LOCK_FLAG</a> analysisRes)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> ret(scenario);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; ret += <span class="stringliteral">&quot;\t&quot;</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">switch</span> (analysisRes)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">case</span> LOCK_TRUE:</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">SVFUtil::sucMsg</a>(<span class="stringliteral">&quot;SUCCESS&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">case</span> LOCK_UNSOUND:</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#a054c3e668ce8b265bbc5d923f6243ce7">SVFUtil::bugMsg2</a>(<span class="stringliteral">&quot;UNSOUND&quot;</span>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">case</span> LOCK_IMPRECISE:</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6c66553e2559eebfe4f98c0c7ec4b08">SVFUtil::bugMsg1</a>(<span class="stringliteral">&quot;IMPRECISE&quot;</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">SVFUtil::errMsg</a>(<span class="stringliteral">&quot;FAILURE&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2"> 72</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2">LockResultValidator::collectLockTargets</a>()</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* F = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> it = getModule()-&gt;llvmFunBegin(); it != getModule()-&gt;llvmFunEnd(); it++)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> fName = (*it)-&gt;getName().str();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span>(fName.find(LOCK) != std::string::npos)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; F = (*it);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (!F)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">for</span>(Value::const_use_iterator it = F-&gt;use_begin(), ie = F-&gt;use_end(); it!=ie; it++)</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a334998718813a19a7697daf4ba282faf">Use</a> *u = &amp;*it;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *user = u-&gt;getUser();</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&gt;(user);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> y = getStringArg(inst, 0);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* memInst = getPreviousMemoryAccessInst(inst);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; instToCxtLockSet[memInst] = y;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>* store = SVFUtil::dyn_cast&lt;StoreInst&gt; (memInst))</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">BinaryOperator</a>* bop = SVFUtil::dyn_cast&lt;BinaryOperator&gt; (store-&gt;getValueOperand()))</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v = bop-&gt;getOperand(0);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>&gt; (v);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; instToCxtLockSet[prevInst] = y;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;}</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9"> 108</a></span>&#160;<a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LockResultValidator::LOCK_FLAG</a> <a class="code" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9">LockResultValidator::validateStmtInLock</a>()</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LockResultValidator::LOCK_FLAG</a> res = <a class="code" href="classSVF_1_1LockResultValidator.html#a005c38dd07eb66d52066fa1927b1e19f">LockResultValidator::LOCK_TRUE</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html#a710aad28484677637367e9098a55c7d7">LockAnalysis::CxtStmtToCxtLockSet</a> analyedLS = _la-&gt;getCSTCLS();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">for</span>(LockAnalysis::CxtStmtToCxtLockSet::iterator it = analyedLS.begin(),</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; eit = analyedLS.end(); it!=eit; it++)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = ((*it).first).getStmt();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span>(!SVFUtil::isa&lt;LoadInst&gt; (inst) &amp;&amp; !SVFUtil::isa&lt;StoreInst&gt; (inst))</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* F = inst-&gt;getParent()-&gt;getParent();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span>(inFilter(F-&gt;getName().str()))</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> LS = instToCxtLockSet[inst];</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span>(LS.size() != (*it).second.size())</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ac609142ee5a0caaf3ac51238ec421c2e">Options::PrintValidRes</a>)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">errMsg</a>(<span class="stringliteral">&quot;\nValidate Stmt&#39;s Lock : Wrong at: &quot;</span>) &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(inst) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Reason: The number of lock on current stmt is wrong\n&quot;</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n----Given locks:\n&quot;</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">for</span> (CxtLockSetStr::iterator it1 = LS.begin(),eit1 = LS.end(); it1 != eit1; it++)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Lock &quot;</span> &lt;&lt; *it1 &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n----Analysis locks:\n&quot;</span>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">for</span> (LockAnalysis::CxtLockSet::iterator it2 = (*it).second.begin(),</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; eit2 = (*it).second.end(); it2 != eit2; ++it)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call = (*it2).getStmt();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lockName = call-&gt;getOperand(0)-&gt;getName().str();</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()&lt;&lt;<span class="stringliteral">&quot;Lock &quot;</span> &lt;&lt; lockName &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; res = <a class="code" href="classSVF_1_1LockResultValidator.html#a03589368482d3f7ee7f6734e257dcbdf">LockResultValidator::LOCK_UNSOUND</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html#a0716c155b42b3ae7a6c8d7593bb6ac83">LockAnalysis::CxtLockSet</a> LSA = (*it).second;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">for</span>(LockAnalysis::CxtLockSet::iterator it3 = LSA.begin(), eit3=LSA.end(); it3!=eit3; it3++)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call = (*it3).getStmt();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lockName = call-&gt;getOperand(0)-&gt;getName().str();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span>(!match(lockName, LS))</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#ac609142ee5a0caaf3ac51238ec421c2e">Options::PrintValidRes</a>)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\nValidate Stmt&#39;s Lock : Wrong at (&quot;</span> &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(inst) &lt;&lt; <span class="stringliteral">&quot;)\n&quot;</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Reason: The number of lock on current stmt is wrong\n&quot;</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n Lock &quot;</span> &lt;&lt; lockName &lt;&lt; <span class="stringliteral">&quot; should not protect current instruction\n&quot;</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; res = <a class="code" href="classSVF_1_1LockResultValidator.html#a760c0f6f891daa4532a44c6594794bb8">LockResultValidator::LOCK_IMPRECISE</a>;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d"> 166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d">LockResultValidator::analyze</a>()</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot; --- Lock Analysis Result Validation ---\n&quot;</span>);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span>(!collectLockTargets())</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> errstring;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; errstring = getOutput(<span class="stringliteral">&quot;Validate Lock Analysis :&quot;</span>, validateStmtInLock());</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;======&quot;</span> &lt;&lt; errstring &lt;&lt; <span class="stringliteral">&quot;======\n&quot;</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;}</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="ttc" id="namespaceSVF_html_a334998718813a19a7697daf4ba282faf"><div class="ttname"><a href="namespaceSVF.html#a334998718813a19a7697daf4ba282faf">SVF::Use</a></div><div class="ttdeci">llvm::Use Use</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00036">BasicTypes.h:36</a></div></div>
70
70
  <div class="ttc" id="namespaceSVF_html_ab696aab940eb187dc81217efe8649af5"><div class="ttname"><a href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">SVF::StoreInst</a></div><div class="ttdeci">llvm::StoreInst StoreInst</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00098">BasicTypes.h:98</a></div></div>
71
71
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>
72
72
  <div class="ttc" id="namespaceSVF_html_aad5d26ab07a5d1314bdb8f54e0fcdb22"><div class="ttname"><a href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">SVF::BinaryOperator</a></div><div class="ttdeci">llvm::BinaryOperator BinaryOperator</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00113">BasicTypes.h:113</a></div></div>
@@ -95,14 +95,12 @@ $(function() {
95
95
  <div class="ttc" id="classSVF_1_1LockResultValidator_html_a3b7d25dfe5251f49afbb733c25eee70f"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">SVF::LockResultValidator::LOCK_FLAG</a></div><div class="ttdeci">unsigned LOCK_FLAG</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8h_source.html#l00024">LockResultValidator.h:24</a></div></div>
96
96
  <div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00069">BasicTypes.h:69</a></div></div>
97
97
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
98
- <div class="ttc" id="CFLGrammar_8txt_html_a92d5a256d74eadeb5bfa131b84067f0d"><div class="ttname"><a href="CFLGrammar_8txt.html#a92d5a256d74eadeb5bfa131b84067f0d">store</a></div><div class="ttdeci">Memflow load store</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8txt_source.html#l00030">CFLGrammar.txt:30</a></div></div>
99
98
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a202de7ad2bea0311e2f75894c030e7a9"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVF::SVFUtil::getLLVMCallSite</a></div><div class="ttdeci">CallSite getLLVMCallSite(const Instruction *inst)</div><div class="ttdoc">Return LLVM callsite given a instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00217">SVFUtil.h:217</a></div></div>
100
99
  <div class="ttc" id="classSVF_1_1LockResultValidator_html_ae6c8782d10e96951f059789aaa309cc2"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2">SVF::LockResultValidator::collectLockTargets</a></div><div class="ttdeci">bool collectLockTargets()</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00072">LockResultValidator.cpp:72</a></div></div>
101
100
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
102
101
  <div class="ttc" id="classSVF_1_1LockResultValidator_html_a1b1b841451fe51cb58417e864a28cbfc"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc">SVF::LockResultValidator::getStringArg</a></div><div class="ttdeci">Set&lt; std::string &gt; getStringArg(const Instruction *inst, unsigned int arg_num)</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00016">LockResultValidator.cpp:16</a></div></div>
103
102
  <div class="ttc" id="namespaceSVF_html_a5a6e8ab900d5cd17ef72661006a7fbe0"><div class="ttname"><a href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">SVF::LoadInst</a></div><div class="ttdeci">llvm::LoadInst LoadInst</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
104
103
  <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00294">BasicTypes.h:294</a></div></div>
105
- <div class="ttc" id="CFLGrammar_8txt_html_a00967427d1c110ffcc82ea2a966f4564"><div class="ttname"><a href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a></div><div class="ttdeci">V Fbar V F</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8txt_source.html#l00016">CFLGrammar.txt:16</a></div></div>
106
104
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
107
105
  <div class="ttc" id="classSVF_1_1LockResultValidator_html_a005c38dd07eb66d52066fa1927b1e19f"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a005c38dd07eb66d52066fa1927b1e19f">SVF::LockResultValidator::LOCK_TRUE</a></div><div class="ttdeci">static const LOCK_FLAG LOCK_TRUE</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8h_source.html#l00108">LockResultValidator.h:108</a></div></div>
108
106
  <div class="ttc" id="classSVF_1_1LockResultValidator_html_a88ff3ed1398a0b847d71a4c0352ed66d"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d">SVF::LockResultValidator::analyze</a></div><div class="ttdeci">void analyze()</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00166">LockResultValidator.cpp:166</a></div></div>