svf-tools 1.0.409 → 1.0.412

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 (210) hide show
  1. package/CMakeLists.txt +1 -1
  2. package/SVF-doxygen/html/html/AbstractPointsToDS_8h_source.html +1 -1
  3. package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +2 -2
  6. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +1 -1
  7. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
  8. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +3 -3
  9. package/SVF-doxygen/html/html/Andersen_8h_source.html +3 -3
  10. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  11. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
  12. package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  14. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +7 -7
  15. package/SVF-doxygen/html/html/DDAStat_8h_source.html +5 -5
  16. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +1 -1
  18. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
  19. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -2
  20. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +2 -2
  21. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +7 -6
  22. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +3 -3
  23. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
  24. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/MHP_8cpp.html +2 -83
  27. package/SVF-doxygen/html/html/MHP_8cpp_source.html +42 -46
  28. package/SVF-doxygen/html/html/MHP_8h_source.html +26 -26
  29. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
  30. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
  32. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  34. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +10 -10
  35. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +9 -9
  36. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +11 -11
  37. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +8 -8
  38. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +9 -9
  39. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +30 -31
  40. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
  41. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +33 -34
  42. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +9 -9
  43. package/SVF-doxygen/html/html/SVFGStat_8h_source.html +8 -7
  44. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +3 -3
  45. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  46. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +1 -1
  47. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +3 -3
  49. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -2
  51. package/SVF-doxygen/html/html/TCT_8cpp_source.html +14 -14
  52. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  53. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
  54. package/SVF-doxygen/html/html/VFG_8cpp_source.html +1 -1
  55. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +6 -5
  56. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +214 -215
  57. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +15 -16
  58. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +180 -181
  59. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -4
  60. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +226 -227
  61. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +0 -3
  62. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +232 -233
  63. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +2 -5
  64. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +222 -223
  65. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +3 -6
  66. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +222 -223
  67. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -4
  68. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +152 -154
  69. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +9 -12
  70. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
  71. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +221 -222
  72. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +0 -3
  73. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +132 -133
  74. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +28 -33
  75. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +2 -4
  76. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +10 -10
  77. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +1 -1
  78. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +3 -3
  79. package/SVF-doxygen/html/html/classSVF_1_1DDAStat-members.html +4 -4
  80. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +34 -25
  81. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +16 -16
  82. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +3 -3
  83. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +247 -248
  84. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -5
  85. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +208 -209
  86. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +8 -11
  87. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +238 -239
  88. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +21 -24
  89. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +2 -2
  90. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +275 -276
  91. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +8 -10
  92. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +31 -31
  93. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +2 -2
  94. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +38 -38
  95. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +13 -14
  96. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +19 -43
  97. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +2 -2
  98. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  99. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +74 -74
  100. package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +7 -7
  101. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  102. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
  103. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
  104. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +5 -5
  105. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
  106. package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +1 -1
  107. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +8 -8
  108. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +3 -3
  109. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat-members.html +2 -2
  110. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +15 -14
  111. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +33 -33
  112. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +3 -3
  113. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +94 -95
  114. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +73 -107
  115. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +1 -1
  116. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +4 -4
  117. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +11 -13
  118. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat-members.html +6 -6
  119. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +53 -52
  120. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +15 -30
  121. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +2 -2
  122. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +3 -3
  123. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +193 -194
  124. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +0 -3
  125. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +18 -18
  126. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +184 -185
  128. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -5
  129. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
  130. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +1 -1
  131. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +287 -288
  132. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +8 -10
  133. package/SVF-doxygen/html/html/functions_0x7e.html +1 -1
  134. package/SVF-doxygen/html/html/functions_c.html +18 -21
  135. package/SVF-doxygen/html/html/functions_func_0x7e.html +1 -1
  136. package/SVF-doxygen/html/html/functions_func_c.html +12 -13
  137. package/SVF-doxygen/html/html/functions_func_p.html +9 -9
  138. package/SVF-doxygen/html/html/functions_l.html +3 -3
  139. package/SVF-doxygen/html/html/functions_m.html +4 -4
  140. package/SVF-doxygen/html/html/functions_o.html +4 -4
  141. package/SVF-doxygen/html/html/functions_p.html +12 -12
  142. package/SVF-doxygen/html/html/functions_r.html +5 -4
  143. package/SVF-doxygen/html/html/functions_s.html +3 -3
  144. package/SVF-doxygen/html/html/functions_t.html +5 -7
  145. package/SVF-doxygen/html/html/functions_v.html +6 -6
  146. package/SVF-doxygen/html/html/functions_vars_m.html +4 -4
  147. package/SVF-doxygen/html/html/functions_vars_r.html +1 -2
  148. package/SVF-doxygen/html/html/globals_func_g.html +0 -6
  149. package/SVF-doxygen/html/html/globals_g.html +2 -8
  150. package/SVF-doxygen/html/html/globals_s.html +4 -2
  151. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -2
  152. package/SVF-doxygen/html/html/search/all_10.js +7 -7
  153. package/SVF-doxygen/html/html/search/all_12.js +3 -3
  154. package/SVF-doxygen/html/html/search/all_13.js +7 -7
  155. package/SVF-doxygen/html/html/search/all_14.js +4 -4
  156. package/SVF-doxygen/html/html/search/all_16.js +3 -3
  157. package/SVF-doxygen/html/html/search/all_1b.js +1 -1
  158. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  159. package/SVF-doxygen/html/html/search/all_7.js +0 -2
  160. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  161. package/SVF-doxygen/html/html/search/all_d.js +4 -4
  162. package/SVF-doxygen/html/html/search/all_e.js +1 -1
  163. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  164. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  165. package/SVF-doxygen/html/html/search/functions_16.js +1 -1
  166. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  167. package/SVF-doxygen/html/html/search/functions_6.js +0 -2
  168. package/SVF-doxygen/html/html/search/functions_e.js +6 -6
  169. package/SVF-doxygen/html/html/search/variables_12.js +1 -1
  170. package/SVF-doxygen/html/html/search/variables_14.js +3 -3
  171. package/SVF-doxygen/html/html/search/variables_d.js +4 -4
  172. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  173. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +14 -14
  174. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SVFGNodeLockSpan_01_4.html +3 -3
  175. package/SVF-doxygen/html/html/svf-ex_8cpp.html +4 -3
  176. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +2 -1
  177. package/include/DDA/DDAStat.h +4 -4
  178. package/include/Graphs/SVFGNode.h +2 -4
  179. package/include/Graphs/SVFGStat.h +8 -8
  180. package/include/MTA/FSMPTA.h +1 -0
  181. package/include/MTA/MTAResultValidator.h +1 -1
  182. package/include/MemoryModel/AbstractPointsToDS.h +6 -0
  183. package/include/MemoryModel/PointerAnalysis.h +0 -5
  184. package/include/MemoryModel/SymbolTableInfo.h +2 -2
  185. package/include/Util/IRAnnotator.h +2 -2
  186. package/include/WPA/Andersen.h +1 -1
  187. package/include/WPA/AndersenSFR.h +1 -1
  188. package/lib/CUDD/CMakeLists.txt +1 -1
  189. package/lib/DDA/DDAStat.cpp +2 -2
  190. package/lib/Graphs/SVFGStat.cpp +4 -4
  191. package/lib/MSSA/SVFGBuilder.cpp +0 -1
  192. package/lib/MTA/FSMPTA.cpp +2 -3
  193. package/lib/MTA/LockResultValidator.cpp +1 -1
  194. package/lib/MTA/MHP.cpp +0 -36
  195. package/lib/MTA/MTAResultValidator.cpp +3 -3
  196. package/lib/MTA/TCT.cpp +0 -1
  197. package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
  198. package/lib/MemoryModel/PointerAnalysisImpl.cpp +0 -1
  199. package/lib/MemoryModel/SVFIR.cpp +15 -15
  200. package/lib/MemoryModel/SymbolTableInfo.cpp +1 -1
  201. package/lib/SVF-FE/LLVMUtil.cpp +1 -1
  202. package/lib/SVF-FE/SVFIRBuilder.cpp +5 -5
  203. package/lib/Util/CoreBitVector.cpp +1 -1
  204. package/lib/Util/ExtAPI.cpp +1 -0
  205. package/lib/Util/NodeIDAllocator.cpp +0 -1
  206. package/lib/WPA/AndersenSFR.cpp +2 -2
  207. package/lib/WPA/FlowSensitiveTBHC.cpp +1 -1
  208. package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
  209. package/package.json +1 -1
  210. package/tools/Example/svf-ex.cpp +4 -3
@@ -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 &lt;string&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</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="l00011"></a><span class="lineno"> 11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc"> 15</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="l00016"></a><span class="lineno"> 16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(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="l00018"></a><span class="lineno"> 18</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="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((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="l00020"></a><span class="lineno"> 20</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="l00021"></a><span class="lineno"> 21</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="l00022"></a><span class="lineno"> 22</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="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">if</span> (!cxtarray)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> strvec;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> strvec;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a88fd7387fcf16caf70abe265cdcf90b9">StringRef</a> vthdcxtstring = cxtarray-&gt;getAsCString();</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> split(vthdcxtstring.str(), <span class="charliteral">&#39;,&#39;</span>);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</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"><a class="line" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f"> 32</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> std::string &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="l00033"></a><span class="lineno"> 33</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; std::stringstream ss(s);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::string item;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">while</span> (std::getline(ss, item, delim))</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; elems.insert(item);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;}</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"><a class="line" href="classSVF_1_1LockResultValidator.html#ad26006e14c866d694bc6e2ebaa41ded9"> 43</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> std::string &amp;s, <span class="keywordtype">char</span> delim)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> elems;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; split(s, delim, elems);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</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"><a class="line" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330"> 50</a></span>&#160;<span class="keyword">inline</span> std::string <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="l00051"></a><span class="lineno"> 51</span>&#160;{</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; std::string ret(scenario);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; ret += <span class="stringliteral">&quot;\t&quot;</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">switch</span> (analysisRes)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">case</span> LOCK_TRUE:</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</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="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">case</span> LOCK_UNSOUND:</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</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="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">case</span> LOCK_IMPRECISE:</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</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="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</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"><a class="line" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2"> 71</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="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* F;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</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="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> std::string fName = (*it)-&gt;getName().str();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span>(fName.find(LOCK) != std::string::npos) {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; F = (*it);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</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; <span class="keywordflow">if</span> (!F)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</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="l00083"></a><span class="lineno"> 83</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="l00084"></a><span class="lineno"> 84</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="l00085"></a><span class="lineno"> 85</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="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> y = getStringArg(inst, 0);</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#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* memInst = getPreviousMemoryAccessInst(inst);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; instToCxtLockSet[memInst] = y;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</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="l00091"></a><span class="lineno"> 91</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="l00092"></a><span class="lineno"> 92</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="l00093"></a><span class="lineno"> 93</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="l00094"></a><span class="lineno"> 94</span>&#160; instToCxtLockSet[prevInst] = y;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</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; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9"> 101</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="l00102"></a><span class="lineno"> 102</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="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html#a710aad28484677637367e9098a55c7d7">LockAnalysis::CxtStmtToCxtLockSet</a> analyedLS = _la-&gt;getCSTCLS();</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">for</span>(LockAnalysis::CxtStmtToCxtLockSet::iterator it = analyedLS.begin(),</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; eit = analyedLS.end(); it!=eit; it++) {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</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="l00107"></a><span class="lineno"> 107</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="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</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="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span>(inFilter(F-&gt;getName().str()))</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> LS = instToCxtLockSet[inst];</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span>(LS.size() != (*it).second.size()) {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</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="l00115"></a><span class="lineno"> 115</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="l00116"></a><span class="lineno"> 116</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="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">for</span> (CxtLockSetStr::iterator it1 = LS.begin(),eit1 = LS.end(); it1 != eit1; it++) {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</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="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</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="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">for</span> (LockAnalysis::CxtLockSet::iterator it2 = (*it).second.begin(), </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; eit2 = (*it).second.end(); it2 != eit2; ++it) {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</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="l00125"></a><span class="lineno"> 125</span>&#160; std::string lockName = call-&gt;getOperand(0)-&gt;getName().str();</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;<span class="stringliteral">&quot;Lock &quot;</span> &lt;&lt; lockName &lt;&lt; <span class="stringliteral">&quot; &quot;</span>; </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</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&quot;</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; res = <a class="code" href="classSVF_1_1LockResultValidator.html#a03589368482d3f7ee7f6734e257dcbdf">LockResultValidator::LOCK_UNSOUND</a>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html#a0716c155b42b3ae7a6c8d7593bb6ac83">LockAnalysis::CxtLockSet</a> LSA = (*it).second;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</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="l00135"></a><span class="lineno"> 135</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="l00136"></a><span class="lineno"> 136</span>&#160; std::string lockName = call-&gt;getOperand(0)-&gt;getName().str();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span>(!match(lockName, LS)) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</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="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;\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="l00140"></a><span class="lineno"> 140</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="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 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="l00142"></a><span class="lineno"> 142</span>&#160; res = <a class="code" href="classSVF_1_1LockResultValidator.html#a760c0f6f891daa4532a44c6594794bb8">LockResultValidator::LOCK_IMPRECISE</a>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</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; }</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">return</span> res;</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;</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d"> 150</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="l00151"></a><span class="lineno"> 151</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="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span>(!collectLockTargets())</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; std::string errstring;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; errstring = getOutput(<span class="stringliteral">&quot;Validate Lock Analysis :&quot;</span>, validateStmtInLock());</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;======&quot;</span> &lt;&lt; errstring &lt;&lt; <span class="stringliteral">&quot;======\n&quot;</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</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="Util_2BasicTypes_8h_source.html#l00084">BasicTypes.h:84</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 &lt;string&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</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="l00011"></a><span class="lineno"> 11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc"> 15</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="l00016"></a><span class="lineno"> 16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(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="l00018"></a><span class="lineno"> 18</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="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((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="l00020"></a><span class="lineno"> 20</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="l00021"></a><span class="lineno"> 21</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="l00022"></a><span class="lineno"> 22</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="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">if</span> (!cxtarray)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> strvec;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> strvec;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a88fd7387fcf16caf70abe265cdcf90b9">StringRef</a> vthdcxtstring = cxtarray-&gt;getAsCString();</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> split(vthdcxtstring.str(), <span class="charliteral">&#39;,&#39;</span>);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</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"><a class="line" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f"> 32</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> std::string &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="l00033"></a><span class="lineno"> 33</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; std::stringstream ss(s);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::string item;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">while</span> (std::getline(ss, item, delim))</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; elems.insert(item);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;}</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"><a class="line" href="classSVF_1_1LockResultValidator.html#ad26006e14c866d694bc6e2ebaa41ded9"> 43</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> std::string &amp;s, <span class="keywordtype">char</span> delim)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::string&gt;</a> elems;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; split(s, delim, elems);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</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"><a class="line" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330"> 50</a></span>&#160;<span class="keyword">inline</span> std::string <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="l00051"></a><span class="lineno"> 51</span>&#160;{</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; std::string ret(scenario);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; ret += <span class="stringliteral">&quot;\t&quot;</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">switch</span> (analysisRes)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">case</span> LOCK_TRUE:</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</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="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">case</span> LOCK_UNSOUND:</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</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="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">case</span> LOCK_IMPRECISE:</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</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="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</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"><a class="line" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2"> 71</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="l00072"></a><span class="lineno"> 72</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="l00073"></a><span class="lineno"> 73</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="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> std::string fName = (*it)-&gt;getName().str();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span>(fName.find(LOCK) != std::string::npos) {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; F = (*it);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</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; <span class="keywordflow">if</span> (!F)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</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="l00083"></a><span class="lineno"> 83</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="l00084"></a><span class="lineno"> 84</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="l00085"></a><span class="lineno"> 85</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="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> y = getStringArg(inst, 0);</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#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* memInst = getPreviousMemoryAccessInst(inst);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; instToCxtLockSet[memInst] = y;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</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="l00091"></a><span class="lineno"> 91</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="l00092"></a><span class="lineno"> 92</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="l00093"></a><span class="lineno"> 93</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="l00094"></a><span class="lineno"> 94</span>&#160; instToCxtLockSet[prevInst] = y;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</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; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;}</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9"> 101</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="l00102"></a><span class="lineno"> 102</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="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html#a710aad28484677637367e9098a55c7d7">LockAnalysis::CxtStmtToCxtLockSet</a> analyedLS = _la-&gt;getCSTCLS();</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">for</span>(LockAnalysis::CxtStmtToCxtLockSet::iterator it = analyedLS.begin(),</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; eit = analyedLS.end(); it!=eit; it++) {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</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="l00107"></a><span class="lineno"> 107</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="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</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="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span>(inFilter(F-&gt;getName().str()))</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> LS = instToCxtLockSet[inst];</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span>(LS.size() != (*it).second.size()) {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</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="l00115"></a><span class="lineno"> 115</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="l00116"></a><span class="lineno"> 116</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="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">for</span> (CxtLockSetStr::iterator it1 = LS.begin(),eit1 = LS.end(); it1 != eit1; it++) {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</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="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</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="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">for</span> (LockAnalysis::CxtLockSet::iterator it2 = (*it).second.begin(), </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; eit2 = (*it).second.end(); it2 != eit2; ++it) {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</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="l00125"></a><span class="lineno"> 125</span>&#160; std::string lockName = call-&gt;getOperand(0)-&gt;getName().str();</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;<span class="stringliteral">&quot;Lock &quot;</span> &lt;&lt; lockName &lt;&lt; <span class="stringliteral">&quot; &quot;</span>; </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</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&quot;</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; res = <a class="code" href="classSVF_1_1LockResultValidator.html#a03589368482d3f7ee7f6734e257dcbdf">LockResultValidator::LOCK_UNSOUND</a>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html#a0716c155b42b3ae7a6c8d7593bb6ac83">LockAnalysis::CxtLockSet</a> LSA = (*it).second;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</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="l00135"></a><span class="lineno"> 135</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="l00136"></a><span class="lineno"> 136</span>&#160; std::string lockName = call-&gt;getOperand(0)-&gt;getName().str();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span>(!match(lockName, LS)) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</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="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;\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="l00140"></a><span class="lineno"> 140</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="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 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="l00142"></a><span class="lineno"> 142</span>&#160; res = <a class="code" href="classSVF_1_1LockResultValidator.html#a760c0f6f891daa4532a44c6594794bb8">LockResultValidator::LOCK_IMPRECISE</a>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</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; }</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">return</span> res;</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;</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d"> 150</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="l00151"></a><span class="lineno"> 151</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="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span>(!collectLockTargets())</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; std::string errstring;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; errstring = getOutput(<span class="stringliteral">&quot;Validate Lock Analysis :&quot;</span>, validateStmtInLock());</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;======&quot;</span> &lt;&lt; errstring &lt;&lt; <span class="stringliteral">&quot;======\n&quot;</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</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="Util_2BasicTypes_8h_source.html#l00084">BasicTypes.h:84</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#l00139">BasicTypes.h:139</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#l00101">SVFUtil.cpp:101</a></div></div>
72
72
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
@@ -93,10 +93,6 @@ Namespaces</h2></td></tr>
93
93
  </table><table class="memberdecls">
94
94
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
95
95
  Functions</h2></td></tr>
96
- <tr class="memitem:a04cfa4119d5964972799ae716951babe"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="MHP_8cpp.html#a04cfa4119d5964972799ae716951babe">getBasePtr</a> (const <a class="el" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *v)</td></tr>
97
- <tr class="separator:a04cfa4119d5964972799ae716951babe"><td class="memSeparator" colspan="2">&#160;</td></tr>
98
- <tr class="memitem:ae713d8413cfbe62885fc3fa8e38c3492"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="namespaceSVF.html#aac5262378e41a3414a20cc9a41d4adc6">SCEV</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="MHP_8cpp.html#ae713d8413cfbe62885fc3fa8e38c3492">getSCEVMinusExpr</a> (const <a class="el" href="namespaceSVF.html#aac5262378e41a3414a20cc9a41d4adc6">SCEV</a> *s1, const <a class="el" href="namespaceSVF.html#aac5262378e41a3414a20cc9a41d4adc6">SCEV</a> *s2, <a class="el" href="namespaceSVF.html#ad8794eb3c00de3d3b5c5e43dded3fb42">ScalarEvolution</a> *SE)</td></tr>
99
- <tr class="separator:ae713d8413cfbe62885fc3fa8e38c3492"><td class="memSeparator" colspan="2">&#160;</td></tr>
100
96
  <tr class="memitem:a1a6f1ed70075da459ab275eb5c099144"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="MHP_8cpp.html#a1a6f1ed70075da459ab275eb5c099144">accessSameArrayIndex</a> (const <a class="el" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> *ptr1, const <a class="el" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> *ptr2)</td></tr>
101
97
  <tr class="separator:a1a6f1ed70075da459ab275eb5c099144"><td class="memSeparator" colspan="2">&#160;</td></tr>
102
98
  </table>
@@ -135,90 +131,13 @@ Functions</h2></td></tr>
135
131
  </table>
136
132
  </div><div class="memdoc">
137
133
 
138
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l01039">1039</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
139
- <div class="fragment"><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;{</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; std::vector&lt;u32_t&gt; ptr1vec;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa508c087703240dad69a9827e85ebd0b">gep_type_iterator</a> gi = gep_type_begin(*ptr1), ge = gep_type_end(*ptr1);</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; gi != ge; ++gi)</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; {</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* ci = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; {</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> idx = ci-&gt;getSExtValue();</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; ptr1vec.push_back(idx);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; }</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; }</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; std::vector&lt;u32_t&gt; ptr2vec;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa508c087703240dad69a9827e85ebd0b">gep_type_iterator</a> gi = gep_type_begin(*ptr2), ge = gep_type_end(*ptr2);</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; gi != ge; ++gi)</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; {</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* ci = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; {</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> idx = ci-&gt;getSExtValue();</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; ptr2vec.push_back(idx);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; }</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; }</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="keywordflow">return</span> ptr1vec==ptr2vec;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
134
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l01003">1003</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
135
+ <div class="fragment"><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;{</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; std::vector&lt;u32_t&gt; ptr1vec;</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa508c087703240dad69a9827e85ebd0b">gep_type_iterator</a> gi = gep_type_begin(*ptr1), ge = gep_type_end(*ptr1);</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; gi != ge; ++gi)</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; {</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* ci = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> idx = ci-&gt;getSExtValue();</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; ptr1vec.push_back(idx);</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; std::vector&lt;u32_t&gt; ptr2vec;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa508c087703240dad69a9827e85ebd0b">gep_type_iterator</a> gi = gep_type_begin(*ptr2), ge = gep_type_end(*ptr2);</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; gi != ge; ++gi)</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; {</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* ci = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; {</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> idx = ci-&gt;getSExtValue();</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; ptr2vec.push_back(idx);</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; }</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; }</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">return</span> ptr1vec==ptr2vec;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
140
136
  <div class="ttc" id="namespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00119">BasicTypes.h:119</a></div></div>
141
137
  <div class="ttc" id="namespaceSVF_html_aa508c087703240dad69a9827e85ebd0b"><div class="ttname"><a href="namespaceSVF.html#aa508c087703240dad69a9827e85ebd0b">SVF::gep_type_iterator</a></div><div class="ttdeci">llvm::gep_type_iterator gep_type_iterator</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00199">BasicTypes.h:199</a></div></div>
142
138
  </div><!-- fragment -->
143
139
  </div>
144
140
  </div>
145
- <a id="a04cfa4119d5964972799ae716951babe"></a>
146
- <h2 class="memtitle"><span class="permalink"><a href="#a04cfa4119d5964972799ae716951babe">&#9670;&nbsp;</a></span>getBasePtr()</h2>
147
-
148
- <div class="memitem">
149
- <div class="memproto">
150
- <table class="mlabels">
151
- <tr>
152
- <td class="mlabels-left">
153
- <table class="memname">
154
- <tr>
155
- <td class="memname">static const <a class="el" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* getBasePtr </td>
156
- <td>(</td>
157
- <td class="paramtype">const <a class="el" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *&#160;</td>
158
- <td class="paramname"><em>v</em></td><td>)</td>
159
- <td></td>
160
- </tr>
161
- </table>
162
- </td>
163
- <td class="mlabels-right">
164
- <span class="mlabels"><span class="mlabel">static</span></span> </td>
165
- </tr>
166
- </table>
167
- </div><div class="memdoc">
168
- <p>Get the base pointer from any GEP. </p>
169
-
170
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00023">23</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
171
- <div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> *GEP = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>&gt;(v);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">while</span> (GEP)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; v = GEP-&gt;getOperand(0);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; GEP = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>&gt;(v);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; }</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">return</span> v;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_ac4e93e1fec646ff222940a663843921b"><div class="ttname"><a href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">SVF::GetElementPtrInst</a></div><div class="ttdeci">llvm::GetElementPtrInst GetElementPtrInst</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00142">BasicTypes.h:142</a></div></div>
172
- <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>
173
- </div><!-- fragment -->
174
- </div>
175
- </div>
176
- <a id="ae713d8413cfbe62885fc3fa8e38c3492"></a>
177
- <h2 class="memtitle"><span class="permalink"><a href="#ae713d8413cfbe62885fc3fa8e38c3492">&#9670;&nbsp;</a></span>getSCEVMinusExpr()</h2>
178
-
179
- <div class="memitem">
180
- <div class="memproto">
181
- <table class="mlabels">
182
- <tr>
183
- <td class="mlabels-left">
184
- <table class="memname">
185
- <tr>
186
- <td class="memname">static const <a class="el" href="namespaceSVF.html#aac5262378e41a3414a20cc9a41d4adc6">SCEV</a>* getSCEVMinusExpr </td>
187
- <td>(</td>
188
- <td class="paramtype">const <a class="el" href="namespaceSVF.html#aac5262378e41a3414a20cc9a41d4adc6">SCEV</a> *&#160;</td>
189
- <td class="paramname"><em>s1</em>, </td>
190
- </tr>
191
- <tr>
192
- <td class="paramkey"></td>
193
- <td></td>
194
- <td class="paramtype">const <a class="el" href="namespaceSVF.html#aac5262378e41a3414a20cc9a41d4adc6">SCEV</a> *&#160;</td>
195
- <td class="paramname"><em>s2</em>, </td>
196
- </tr>
197
- <tr>
198
- <td class="paramkey"></td>
199
- <td></td>
200
- <td class="paramtype"><a class="el" href="namespaceSVF.html#ad8794eb3c00de3d3b5c5e43dded3fb42">ScalarEvolution</a> *&#160;</td>
201
- <td class="paramname"><em>SE</em>&#160;</td>
202
- </tr>
203
- <tr>
204
- <td></td>
205
- <td>)</td>
206
- <td></td><td></td>
207
- </tr>
208
- </table>
209
- </td>
210
- <td class="mlabels-right">
211
- <span class="mlabels"><span class="mlabel">static</span></span> </td>
212
- </tr>
213
- </table>
214
- </div><div class="memdoc">
215
- <p>Compute a SCEV that represents the subtraction of two given SCEVs. </p>
216
-
217
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00038">38</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
218
- <div class="fragment"><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">if</span> (SE-&gt;getCouldNotCompute() == s1 || SE-&gt;getCouldNotCompute() == s2)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">return</span> SE-&gt;getCouldNotCompute();</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; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *t1 = SE-&gt;getEffectiveSCEVType(s1-&gt;getType());</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *t2 = SE-&gt;getEffectiveSCEVType(s2-&gt;getType());</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span> (t1 != t2)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">if</span> (SE-&gt;getTypeSizeInBits(t1) &lt; SE-&gt;getTypeSizeInBits(t2))</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; s1 = SE-&gt;getSignExtendExpr(s1, t2);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; s2 = SE-&gt;getSignExtendExpr(s2, t1);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</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; <span class="keywordflow">return</span> SE-&gt;getMinusSCEV(s1, s2);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00073">BasicTypes.h:73</a></div></div>
219
- </div><!-- fragment -->
220
- </div>
221
- </div>
222
141
  </div><!-- contents -->
223
142
  <!-- start footer part -->
224
143
  <hr class="footer"/><address class="footer"><small>