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.
- package/CMakeLists.txt +1 -1
- package/SVF-doxygen/html/html/AbstractPointsToDS_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/Andersen_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/DDAStat_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -2
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +7 -6
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp.html +2 -83
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +42 -46
- package/SVF-doxygen/html/html/MHP_8h_source.html +26 -26
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +9 -9
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +8 -8
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +30 -31
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +33 -34
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFGStat_8h_source.html +8 -7
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +214 -215
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +15 -16
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +180 -181
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +226 -227
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +0 -3
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +232 -233
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +2 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +222 -223
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +3 -6
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +222 -223
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +152 -154
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +9 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +221 -222
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +0 -3
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +132 -133
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +28 -33
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +2 -4
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +34 -25
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +247 -248
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -5
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +208 -209
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +8 -11
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +238 -239
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +21 -24
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +275 -276
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +8 -10
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +13 -14
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +19 -43
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +74 -74
- package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +15 -14
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +94 -95
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +73 -107
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +11 -13
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +53 -52
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +15 -30
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +193 -194
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +0 -3
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +184 -185
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -5
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +287 -288
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +8 -10
- package/SVF-doxygen/html/html/functions_0x7e.html +1 -1
- package/SVF-doxygen/html/html/functions_c.html +18 -21
- package/SVF-doxygen/html/html/functions_func_0x7e.html +1 -1
- package/SVF-doxygen/html/html/functions_func_c.html +12 -13
- package/SVF-doxygen/html/html/functions_func_p.html +9 -9
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_m.html +4 -4
- package/SVF-doxygen/html/html/functions_o.html +4 -4
- package/SVF-doxygen/html/html/functions_p.html +12 -12
- package/SVF-doxygen/html/html/functions_r.html +5 -4
- package/SVF-doxygen/html/html/functions_s.html +3 -3
- package/SVF-doxygen/html/html/functions_t.html +5 -7
- package/SVF-doxygen/html/html/functions_v.html +6 -6
- package/SVF-doxygen/html/html/functions_vars_m.html +4 -4
- package/SVF-doxygen/html/html/functions_vars_r.html +1 -2
- package/SVF-doxygen/html/html/globals_func_g.html +0 -6
- package/SVF-doxygen/html/html/globals_g.html +2 -8
- package/SVF-doxygen/html/html/globals_s.html +4 -2
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -2
- package/SVF-doxygen/html/html/search/all_10.js +7 -7
- package/SVF-doxygen/html/html/search/all_12.js +3 -3
- package/SVF-doxygen/html/html/search/all_13.js +7 -7
- package/SVF-doxygen/html/html/search/all_14.js +4 -4
- package/SVF-doxygen/html/html/search/all_16.js +3 -3
- package/SVF-doxygen/html/html/search/all_1b.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +0 -2
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +4 -4
- package/SVF-doxygen/html/html/search/all_e.js +1 -1
- package/SVF-doxygen/html/html/search/all_f.js +3 -3
- package/SVF-doxygen/html/html/search/functions_10.js +1 -1
- package/SVF-doxygen/html/html/search/functions_16.js +1 -1
- package/SVF-doxygen/html/html/search/functions_2.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +0 -2
- package/SVF-doxygen/html/html/search/functions_e.js +6 -6
- package/SVF-doxygen/html/html/search/variables_12.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_d.js +4 -4
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +14 -14
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SVFGNodeLockSpan_01_4.html +3 -3
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +4 -3
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +2 -1
- package/include/DDA/DDAStat.h +4 -4
- package/include/Graphs/SVFGNode.h +2 -4
- package/include/Graphs/SVFGStat.h +8 -8
- package/include/MTA/FSMPTA.h +1 -0
- package/include/MTA/MTAResultValidator.h +1 -1
- package/include/MemoryModel/AbstractPointsToDS.h +6 -0
- package/include/MemoryModel/PointerAnalysis.h +0 -5
- package/include/MemoryModel/SymbolTableInfo.h +2 -2
- package/include/Util/IRAnnotator.h +2 -2
- package/include/WPA/Andersen.h +1 -1
- package/include/WPA/AndersenSFR.h +1 -1
- package/lib/CUDD/CMakeLists.txt +1 -1
- package/lib/DDA/DDAStat.cpp +2 -2
- package/lib/Graphs/SVFGStat.cpp +4 -4
- package/lib/MSSA/SVFGBuilder.cpp +0 -1
- package/lib/MTA/FSMPTA.cpp +2 -3
- package/lib/MTA/LockResultValidator.cpp +1 -1
- package/lib/MTA/MHP.cpp +0 -36
- package/lib/MTA/MTAResultValidator.cpp +3 -3
- package/lib/MTA/TCT.cpp +0 -1
- package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +0 -1
- package/lib/MemoryModel/SVFIR.cpp +15 -15
- package/lib/MemoryModel/SymbolTableInfo.cpp +1 -1
- package/lib/SVF-FE/LLVMUtil.cpp +1 -1
- package/lib/SVF-FE/SVFIRBuilder.cpp +5 -5
- package/lib/Util/CoreBitVector.cpp +1 -1
- package/lib/Util/ExtAPI.cpp +1 -0
- package/lib/Util/NodeIDAllocator.cpp +0 -1
- package/lib/WPA/AndersenSFR.cpp +2 -2
- package/lib/WPA/FlowSensitiveTBHC.cpp +1 -1
- package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
- package/package.json +1 -1
- package/tools/Example/svf-ex.cpp +4 -3
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">svf-ex.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="svf-ex_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> <span class="comment">//===- svf-ex.cpp -- A driver example of SVF-------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===-----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> // A driver program of SVF including usages of SVF APIs</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> //</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> // Author: Yulei Sui,</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>"</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="SVFG_8h.html">Graphs/SVFG.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="SVFIRBuilder_8h.html">SVF-FE/SVFIRBuilder.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">using namespace </span><a class="code" href="namespacellvm.html">llvm</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">static</span> llvm::cl::opt<std::string> <a class="code" href="svf-ex_8cpp.html#a2d332c504284f0bc181289ee67479845">InputFilename</a>(cl::Positional,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  llvm::cl::desc(<span class="stringliteral">"<input bitcode>"</span>), llvm::cl::init(<span class="stringliteral">"-"</span>));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a5fe2142b121150867c08ee9bd8f65940"> 45</a></span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">SVF::AliasResult</a> <a class="code" href="svf-ex_8cpp.html#a5fe2142b121150867c08ee9bd8f65940">aliasQuery</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v1, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v2)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(v1,v2);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#ae004a620ad67220b6dd8212a2ad625a9"> 53</a></span> std::string <a class="code" href="svf-ex_8cpp.html#ae004a620ad67220b6dd8212a2ad625a9">printPts</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  std::string str;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pNodeId = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(pNodeId);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> ii = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), ie = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  ii != ie; ii++)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  rawstr << <span class="stringliteral">" "</span> << *ii << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* targetObj = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*ii);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">if</span>(targetObj-><a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  rawstr << <span class="stringliteral">"("</span> <<*targetObj-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>() << <span class="stringliteral">")\t "</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#af45b449c07f1c975eea45d40d1cc37f6"> 80</a></span> <span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#af45b449c07f1c975eea45d40d1cc37f6">traverseOnICFG</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* iNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<const ICFGNode*></a> worklist;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const ICFGNode*></a> visited;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(iNode);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">ICFGNode::const_iterator</a> it = iNode-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  iNode-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *it;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* succNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  visited.insert(succNode);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succNode);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a210d797e39e39071d420ba450727d6e4"> 108</a></span> <span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#a210d797e39e39071d420ba450727d6e4">traverseOnVFG</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* vfg, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = SVFIR::getPAG();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pNode = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(pag-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val));</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = vfg-><a class="code" href="classSVF_1_1SVFG.html#a8e7a945f4266e8dc7dcfff2ad6494bfb">getDefSVFGNode</a>(pNode);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<const VFGNode*></a> worklist;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const VFGNode*></a> visited;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(vNode);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">VFGNode::const_iterator</a> it = vNode-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  vNode-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *it;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* succNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  visited.insert(succNode);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succNode);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const VFGNode*>::const_iterator</a> it = visited.begin(), eit = visited.end(); it!=eit; ++it)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node = *it;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 145</a></span> <span class="keywordtype">int</span> <a class="code" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordtype">int</span> arg_num = 0;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordtype">char</span> **arg_value = <span class="keyword">new</span> <span class="keywordtype">char</span>*[argc];</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  std::vector<std::string> moduleNameVec;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a62ca9a79ce7b6960e3fc42d8b183bd50">SVFUtil::processArguments</a>(argc, argv, arg_num, arg_value, moduleNameVec);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  cl::ParseCommandLineOptions(arg_num, arg_value,</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="stringliteral">"Whole Program Points-to Analysis\n"</span>);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> (Options::WriteAnder == <span class="stringliteral">"ir_annotator"</span>)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  LLVMModuleSet::getLLVMModuleSet()->preProcessBCs(moduleNameVec);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = LLVMModuleSet::getLLVMModuleSet()->buildSVFModule(moduleNameVec);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  svfModule-><a class="code" href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">buildSymbolTableInfo</a>();</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">build</a>(svfModule);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph = ander-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="classSVF_1_1VFG.html">VFG</a>* vfg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VFG.html">VFG</a>(callgraph);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> svfBuilder(<span class="keyword">true</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg = svfBuilder.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>(ander);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="comment">// clean up memory</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keyword">delete</span> vfg;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">delete</span> svfg;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  AndersenWaveDiff::releaseAndersenWaveDiff();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  SVFIR::releaseSVFIR();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  LLVMModuleSet::getLLVMModuleSet()->dumpModulesToFile(<span class="stringliteral">".svf.bc"</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">SVF::LLVMModuleSet::releaseLLVMModuleSet</a>();</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  llvm::llvm_shutdown();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
|
|
69
|
+
<a href="svf-ex_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> <span class="comment">//===- svf-ex.cpp -- A driver example of SVF-------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===-----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> // A driver program of SVF including usages of SVF APIs</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> //</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> // Author: Yulei Sui,</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>"</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="SVFG_8h.html">Graphs/SVFG.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="SVFIRBuilder_8h.html">SVF-FE/SVFIRBuilder.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">using namespace </span><a class="code" href="namespacellvm.html">llvm</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">static</span> llvm::cl::opt<std::string> <a class="code" href="svf-ex_8cpp.html#a2d332c504284f0bc181289ee67479845">InputFilename</a>(cl::Positional,</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  llvm::cl::desc(<span class="stringliteral">"<input bitcode>"</span>), llvm::cl::init(<span class="stringliteral">"-"</span>));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a5fe2142b121150867c08ee9bd8f65940"> 45</a></span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">SVF::AliasResult</a> <a class="code" href="svf-ex_8cpp.html#a5fe2142b121150867c08ee9bd8f65940">aliasQuery</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v1, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v2)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(v1,v2);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#ae004a620ad67220b6dd8212a2ad625a9"> 53</a></span> std::string <a class="code" href="svf-ex_8cpp.html#ae004a620ad67220b6dd8212a2ad625a9">printPts</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  std::string str;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pNodeId = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(pNodeId);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> ii = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), ie = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  ii != ie; ii++)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  rawstr << <span class="stringliteral">" "</span> << *ii << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* targetObj = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*ii);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">if</span>(targetObj-><a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  rawstr << <span class="stringliteral">"("</span> <<*targetObj-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>() << <span class="stringliteral">")\t "</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#af45b449c07f1c975eea45d40d1cc37f6"> 80</a></span> <span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#af45b449c07f1c975eea45d40d1cc37f6">traverseOnICFG</a>(<a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* iNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<const ICFGNode*></a> worklist;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const ICFGNode*></a> visited;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(iNode);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ICFGNode.html#ac16c5a3227a44d3b9f7c3209156d9df2">ICFGNode::const_iterator</a> it = vNode-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  vNode-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *it;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* succNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  visited.insert(succNode);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succNode);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a210d797e39e39071d420ba450727d6e4"> 108</a></span> <span class="keywordtype">void</span> <a class="code" href="svf-ex_8cpp.html#a210d797e39e39071d420ba450727d6e4">traverseOnVFG</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* vfg, <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = SVFIR::getPAG();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pNode = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(pag-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val));</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = vfg-><a class="code" href="classSVF_1_1SVFG.html#a8e7a945f4266e8dc7dcfff2ad6494bfb">getDefSVFGNode</a>(pNode);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<const VFGNode*></a> worklist;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const VFGNode*></a> visited;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(vNode);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* vNode = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">VFGNode::const_iterator</a> it = vNode-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), eit =</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  vNode-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *it;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* succNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span> (visited.find(succNode) == visited.end())</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  visited.insert(succNode);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(succNode);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const VFGNode*>::const_iterator</a> it = visited.begin(), eit = visited.end(); it!=eit; ++it)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="comment">// const VFGNode* node = *it;</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"></span> }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 145</a></span> <span class="keywordtype">int</span> <a class="code" href="svf-ex_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordtype">int</span> arg_num = 0;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordtype">char</span> **arg_value = <span class="keyword">new</span> <span class="keywordtype">char</span>*[argc];</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  std::vector<std::string> moduleNameVec;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a62ca9a79ce7b6960e3fc42d8b183bd50">SVFUtil::processArguments</a>(argc, argv, arg_num, arg_value, moduleNameVec);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  cl::ParseCommandLineOptions(arg_num, arg_value,</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="stringliteral">"Whole Program Points-to Analysis\n"</span>);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> (Options::WriteAnder == <span class="stringliteral">"ir_annotator"</span>)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  LLVMModuleSet::getLLVMModuleSet()->preProcessBCs(moduleNameVec);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = LLVMModuleSet::getLLVMModuleSet()->buildSVFModule(moduleNameVec);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  svfModule-><a class="code" href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">buildSymbolTableInfo</a>();</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a> builder;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = builder.<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa6d56f9580f76fd09d25ce6cf7541e98">build</a>(svfModule);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph = ander-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* icfg = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  icfg-><a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">"icfg"</span>);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <a class="code" href="classSVF_1_1VFG.html">VFG</a>* vfg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VFG.html">VFG</a>(callgraph);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> svfBuilder(<span class="keyword">true</span>);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* svfg = svfBuilder.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>(ander);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="comment">// clean up memory</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">delete</span> vfg;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keyword">delete</span> svfg;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  AndersenWaveDiff::releaseAndersenWaveDiff();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  SVFIR::releaseSVFIR();</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  LLVMModuleSet::getLLVMModuleSet()->dumpModulesToFile(<span class="stringliteral">".svf.bc"</span>);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">SVF::LLVMModuleSet::releaseLLVMModuleSet</a>();</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  llvm::llvm_shutdown();</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00044">ICFGEdge.h:44</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1VFG_html"><div class="ttname"><a href="classSVF_1_1VFG.html">SVF::VFG</a></div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00050">VFG.h:50</a></div></div>
|
|
72
72
|
<div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00328">CHG.h:328</a></div></div>
|
|
@@ -109,6 +109,7 @@ $(function() {
|
|
|
109
109
|
<div class="ttc" id="classSVF_1_1ICFG_html"><div class="ttname"><a href="classSVF_1_1ICFG.html">SVF::ICFG</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00046">ICFG.h:46</a></div></div>
|
|
110
110
|
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
111
111
|
<div class="ttc" id="classSVF_1_1VFGNode_html_a3c558955f60c237c558d8faafed781e8"><div class="ttname"><a href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVF::VFGNode::const_iterator</a></div><div class="ttdeci">VFGEdge::VFGEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00060">VFGNode.h:60</a></div></div>
|
|
112
|
+
<div class="ttc" id="classSVF_1_1ICFG_html_a999956500bbd605326531480546db9ba"><div class="ttname"><a href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">SVF::ICFG::dump</a></div><div class="ttdeci">void dump(const std::string &file, bool simple=false)</div><div class="ttdoc">Dump graph into dot file. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00410">ICFG.cpp:410</a></div></div>
|
|
112
113
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html">SVF::FIFOWorkList</a></div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00137">WorkList.h:137</a></div></div>
|
|
113
114
|
<div class="ttc" id="classSVF_1_1SVFG_html"><div class="ttname"><a href="classSVF_1_1SVFG.html">SVF::SVFG</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00065">SVFG.h:65</a></div></div>
|
|
114
115
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
|
package/include/DDA/DDAStat.h
CHANGED
|
@@ -43,13 +43,13 @@ public:
|
|
|
43
43
|
|
|
44
44
|
NodeBS _StrongUpdateStores;
|
|
45
45
|
|
|
46
|
-
void performStatPerQuery(NodeID ptr);
|
|
46
|
+
void performStatPerQuery(NodeID ptr) override;
|
|
47
47
|
|
|
48
|
-
void performStat();
|
|
48
|
+
void performStat() override;
|
|
49
49
|
|
|
50
|
-
void printStat();
|
|
50
|
+
void printStat(std::string str = "") override;
|
|
51
51
|
|
|
52
|
-
void printStatPerQuery(NodeID ptr, const PointsTo& pts);
|
|
52
|
+
void printStatPerQuery(NodeID ptr, const PointsTo& pts) override;
|
|
53
53
|
|
|
54
54
|
void getNumOfOOBQuery();
|
|
55
55
|
|
|
@@ -347,16 +347,14 @@ class IntraMSSAPHISVFGNode : public MSSAPHISVFGNode
|
|
|
347
347
|
{
|
|
348
348
|
|
|
349
349
|
public:
|
|
350
|
-
const MRVer* resVer;
|
|
351
350
|
/// Constructor
|
|
352
351
|
IntraMSSAPHISVFGNode(NodeID id, const MRVer* resVer): MSSAPHISVFGNode(id, resVer, MIntraPhi)
|
|
353
352
|
{
|
|
354
|
-
resVer = resVer;
|
|
355
353
|
}
|
|
356
354
|
|
|
357
|
-
|
|
355
|
+
inline const MRVer* getMRVer() const
|
|
358
356
|
{
|
|
359
|
-
return
|
|
357
|
+
return getResVer();
|
|
360
358
|
}
|
|
361
359
|
|
|
362
360
|
inline OPVers::const_iterator opVerBegin() const
|
|
@@ -80,9 +80,9 @@ public:
|
|
|
80
80
|
{
|
|
81
81
|
|
|
82
82
|
}
|
|
83
|
-
virtual void performStat();
|
|
83
|
+
virtual void performStat() override;
|
|
84
84
|
|
|
85
|
-
virtual void printStat();
|
|
85
|
+
virtual void printStat(std::string str = "") override;
|
|
86
86
|
|
|
87
87
|
private:
|
|
88
88
|
MemSSA* mssa;
|
|
@@ -100,9 +100,9 @@ public:
|
|
|
100
100
|
|
|
101
101
|
virtual ~SVFGStat() {}
|
|
102
102
|
|
|
103
|
-
virtual void performStat();
|
|
103
|
+
virtual void performStat() override;
|
|
104
104
|
|
|
105
|
-
virtual void printStat();
|
|
105
|
+
virtual void printStat(std::string str = "") override;
|
|
106
106
|
|
|
107
107
|
virtual void performSCCStat(SVFGEdgeSet insensitiveCalRetEdges);
|
|
108
108
|
|
|
@@ -205,13 +205,13 @@ private:
|
|
|
205
205
|
|
|
206
206
|
int avgInDegree; ///< average in degrees of SVFG nodes.
|
|
207
207
|
int avgOutDegree; ///< average out degrees of SVFG nodes.
|
|
208
|
-
|
|
209
|
-
|
|
208
|
+
u32_t maxInDegree; ///< max in degrees of SVFG nodes.
|
|
209
|
+
u32_t maxOutDegree; ///< max out degrees of SVFG nodes.
|
|
210
210
|
|
|
211
211
|
int avgIndInDegree; ///< average indirect in degrees of SVFG nodes.
|
|
212
212
|
int avgIndOutDegree; ///< average indirect out degrees of SVFG nodes.
|
|
213
|
-
|
|
214
|
-
|
|
213
|
+
u32_t maxIndInDegree; ///< max indirect in degrees of SVFG nodes.
|
|
214
|
+
u32_t maxIndOutDegree; ///< max indirect out degrees of SVFG nodes.
|
|
215
215
|
|
|
216
216
|
double addTopLevelNodeTimeStart;
|
|
217
217
|
double addTopLevelNodeTimeEnd;
|
package/include/MTA/FSMPTA.h
CHANGED
|
@@ -273,7 +273,7 @@ protected:
|
|
|
273
273
|
{
|
|
274
274
|
// Collect call sites of all RC_ACCESS function calls.
|
|
275
275
|
std::vector<const CallInst*> csInsts;
|
|
276
|
-
const Function *F;
|
|
276
|
+
const Function *F = nullptr;
|
|
277
277
|
for(auto it = M->llvmFunBegin(); it != M->llvmFunEnd(); it++){
|
|
278
278
|
const std::string fName = (*it)->getName().str();
|
|
279
279
|
if(fName.find(RC_ACCESS) != std::string::npos) {
|
|
@@ -268,6 +268,12 @@ public:
|
|
|
268
268
|
|| ptd->getPTDTY() == PTDataTy::MutVersioned
|
|
269
269
|
|| ptd->getPTDTY() == PTDataTy::PersVersioned;
|
|
270
270
|
}
|
|
271
|
+
private:
|
|
272
|
+
using BasePTData::getPts;
|
|
273
|
+
using BasePTData::addPts;
|
|
274
|
+
using BasePTData::unionPts;
|
|
275
|
+
using BasePTData::clearPts;
|
|
276
|
+
using BasePTData::clearFullPts;
|
|
271
277
|
///@}
|
|
272
278
|
};
|
|
273
279
|
|
|
@@ -257,11 +257,6 @@ public:
|
|
|
257
257
|
/// Similar to getPts, this also needs to be implemented in child classes.
|
|
258
258
|
virtual const NodeSet& getRevPts(NodeID nodeId) = 0;
|
|
259
259
|
|
|
260
|
-
/// Clear points-to data
|
|
261
|
-
virtual void clearPts()
|
|
262
|
-
{
|
|
263
|
-
}
|
|
264
|
-
|
|
265
260
|
/// Print targets of a function pointer
|
|
266
261
|
void printIndCSTargets(const CallICFGNode* cs, const FunctionSet& targets);
|
|
267
262
|
|
|
@@ -411,13 +411,13 @@ private:
|
|
|
411
411
|
const Value *refVal;
|
|
412
412
|
/// The unique id to represent this symbol
|
|
413
413
|
SymID symId;
|
|
414
|
-
public:
|
|
415
414
|
|
|
415
|
+
public:
|
|
416
416
|
/// Constructor
|
|
417
417
|
MemObj(SymID id, ObjTypeInfo* ti, const Value *val = nullptr);
|
|
418
418
|
|
|
419
419
|
/// Destructor
|
|
420
|
-
~MemObj()
|
|
420
|
+
virtual ~MemObj()
|
|
421
421
|
{
|
|
422
422
|
destroy();
|
|
423
423
|
}
|
|
@@ -85,7 +85,7 @@ private:
|
|
|
85
85
|
{
|
|
86
86
|
std::string label = it->getName().str();
|
|
87
87
|
std::string toErase = "gepnode-";
|
|
88
|
-
|
|
88
|
+
std::size_t pos = label.find(toErase);
|
|
89
89
|
if (pos == std::string::npos)
|
|
90
90
|
{
|
|
91
91
|
continue;
|
|
@@ -128,7 +128,7 @@ private:
|
|
|
128
128
|
{
|
|
129
129
|
processBasicBlockNode(basicBlock, nodeId, writeFlag);
|
|
130
130
|
}
|
|
131
|
-
else if (
|
|
131
|
+
else if (SVFUtil::isa<Constant>(value))
|
|
132
132
|
{
|
|
133
133
|
processConstantNode(nodeId, writeFlag);
|
|
134
134
|
}
|
package/include/WPA/Andersen.h
CHANGED
|
@@ -534,7 +534,7 @@ protected:
|
|
|
534
534
|
// Solve constraints of each nodes
|
|
535
535
|
virtual void handleCopyGep(ConstraintNode* node);
|
|
536
536
|
// Collapse nodes and fields based on 'lcdCandidates'
|
|
537
|
-
|
|
537
|
+
void mergeSCC();
|
|
538
538
|
// AndersenLCD specified SCC detector, need to input a nodeStack 'lcdCandidate'
|
|
539
539
|
NodeStack& SCCDetect();
|
|
540
540
|
bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId);
|
|
@@ -150,7 +150,7 @@ protected:
|
|
|
150
150
|
void initialize();
|
|
151
151
|
void PWCDetect();
|
|
152
152
|
void fieldExpand(NodeSet& initials, s32_t offset, NodeBS& strides, PointsTo& expandPts);
|
|
153
|
-
bool processGepPts(PointsTo& pts, const GepCGEdge* edge);
|
|
153
|
+
bool processGepPts(const PointsTo& pts, const GepCGEdge* edge);
|
|
154
154
|
bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId);
|
|
155
155
|
|
|
156
156
|
};
|
package/lib/CUDD/CMakeLists.txt
CHANGED
|
@@ -9,7 +9,7 @@ set(SOURCES
|
|
|
9
9
|
add_llvm_library(Cudd ${SOURCES} LINK_LIBS m)
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
set_target_properties(Cudd PROPERTIES COMPILE_FLAGS "-Wno-format -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -DHAVE_IEEE_754 -DSIZEOF_VOID_P=8 -DSIZEOF_LONG=8")
|
|
12
|
+
set_target_properties(Cudd PROPERTIES COMPILE_FLAGS "-Wno-all -Wno-extra -Wno-format -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -DHAVE_IEEE_754 -DSIZEOF_VOID_P=8 -DSIZEOF_LONG=8")
|
|
13
13
|
|
|
14
14
|
if(DEFINED IN_SOURCE_BUILD)
|
|
15
15
|
add_dependencies(Cudd intrinsics_gen)
|
package/lib/DDA/DDAStat.cpp
CHANGED
|
@@ -272,7 +272,7 @@ void DDAStat::printStatPerQuery(NodeID ptr, const PointsTo& pts)
|
|
|
272
272
|
}
|
|
273
273
|
|
|
274
274
|
|
|
275
|
-
void DDAStat::printStat()
|
|
275
|
+
void DDAStat::printStat(string str)
|
|
276
276
|
{
|
|
277
277
|
|
|
278
278
|
if(flowDDA)
|
|
@@ -286,5 +286,5 @@ void DDAStat::printStat()
|
|
|
286
286
|
}
|
|
287
287
|
|
|
288
288
|
SVFUtil::outs() << "\n****Demand-Driven Pointer Analysis Statistics****\n";
|
|
289
|
-
PTAStat::printStat();
|
|
289
|
+
PTAStat::printStat(str);
|
|
290
290
|
}
|
package/lib/Graphs/SVFGStat.cpp
CHANGED
|
@@ -124,11 +124,11 @@ void MemSSAStat::performStat()
|
|
|
124
124
|
/*!
|
|
125
125
|
* Print statistics
|
|
126
126
|
*/
|
|
127
|
-
void MemSSAStat::printStat()
|
|
127
|
+
void MemSSAStat::printStat(string str)
|
|
128
128
|
{
|
|
129
129
|
|
|
130
130
|
SVFUtil::outs() << "\n****Memory SSA Statistics****\n";
|
|
131
|
-
PTAStat::printStat();
|
|
131
|
+
PTAStat::printStat(str);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
/*!
|
|
@@ -498,8 +498,8 @@ void SVFGStat::performSCCStat(SVFGEdgeSet insensitiveCalRetEdges)
|
|
|
498
498
|
|
|
499
499
|
}
|
|
500
500
|
|
|
501
|
-
void SVFGStat::printStat()
|
|
501
|
+
void SVFGStat::printStat(string str)
|
|
502
502
|
{
|
|
503
503
|
SVFUtil::outs() << "\n****SVFG Statistics****\n";
|
|
504
|
-
PTAStat::printStat();
|
|
504
|
+
PTAStat::printStat(str);
|
|
505
505
|
}
|
package/lib/MSSA/SVFGBuilder.cpp
CHANGED
package/lib/MTA/FSMPTA.cpp
CHANGED
|
@@ -682,10 +682,9 @@ void MTASVFGBuilder::readPrecision()
|
|
|
682
682
|
|
|
683
683
|
void MTASVFGBuilder::connectMHPEdges(PointerAnalysis* pta)
|
|
684
684
|
{
|
|
685
|
-
PCG* pcg;
|
|
686
|
-
if (ADDEDGE_NONSPARSE==Options::AddModelFlag)
|
|
685
|
+
PCG* pcg = new PCG(pta);
|
|
686
|
+
if ((ADDEDGE_NONSPARSE==Options::AddModelFlag) && Options::UsePCG)
|
|
687
687
|
{
|
|
688
|
-
pcg= new PCG(pta);
|
|
689
688
|
pcg->analyze();
|
|
690
689
|
}
|
|
691
690
|
collectLoadStoreSVFGNodes();
|
|
@@ -69,7 +69,7 @@ inline std::string LockResultValidator::getOutput(const char *scenario, LOCK_FLA
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
bool LockResultValidator::collectLockTargets() {
|
|
72
|
-
const Function* F;
|
|
72
|
+
const Function* F = nullptr;
|
|
73
73
|
for(auto it = getModule()->llvmFunBegin(); it != getModule()->llvmFunEnd(); it++) {
|
|
74
74
|
const std::string fName = (*it)->getName().str();
|
|
75
75
|
if(fName.find(LOCK) != std::string::npos) {
|
package/lib/MTA/MHP.cpp
CHANGED
|
@@ -17,42 +17,6 @@ using namespace SVF;
|
|
|
17
17
|
using namespace SVFUtil;
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
/*!
|
|
21
|
-
* Get the base pointer from any GEP.
|
|
22
|
-
*/
|
|
23
|
-
static const Value *getBasePtr(const Value *v)
|
|
24
|
-
{
|
|
25
|
-
const GetElementPtrInst *GEP = SVFUtil::dyn_cast<GetElementPtrInst>(v);
|
|
26
|
-
while (GEP)
|
|
27
|
-
{
|
|
28
|
-
v = GEP->getOperand(0);
|
|
29
|
-
GEP = SVFUtil::dyn_cast<GetElementPtrInst>(v);
|
|
30
|
-
}
|
|
31
|
-
return v;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
/*!
|
|
36
|
-
* Compute a SCEV that represents the subtraction of two given SCEVs.
|
|
37
|
-
*/
|
|
38
|
-
static const SCEV *getSCEVMinusExpr(const SCEV *s1,const SCEV *s2, ScalarEvolution *SE)
|
|
39
|
-
{
|
|
40
|
-
if (SE->getCouldNotCompute() == s1 || SE->getCouldNotCompute() == s2)
|
|
41
|
-
return SE->getCouldNotCompute();
|
|
42
|
-
|
|
43
|
-
Type *t1 = SE->getEffectiveSCEVType(s1->getType());
|
|
44
|
-
Type *t2 = SE->getEffectiveSCEVType(s2->getType());
|
|
45
|
-
if (t1 != t2)
|
|
46
|
-
{
|
|
47
|
-
if (SE->getTypeSizeInBits(t1) < SE->getTypeSizeInBits(t2))
|
|
48
|
-
s1 = SE->getSignExtendExpr(s1, t2);
|
|
49
|
-
else
|
|
50
|
-
s2 = SE->getSignExtendExpr(s2, t1);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return SE->getMinusSCEV(s1, s2);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
20
|
namespace SVF
|
|
57
21
|
{
|
|
58
22
|
|
|
@@ -213,7 +213,7 @@ bool MTAResultValidator::collectCallsiteTargets()
|
|
|
213
213
|
|
|
214
214
|
bool MTAResultValidator::collectCxtThreadTargets()
|
|
215
215
|
{
|
|
216
|
-
const Function *F;
|
|
216
|
+
const Function *F = nullptr;
|
|
217
217
|
for(auto it = getModule()->llvmFunBegin(); it != getModule()->llvmFunEnd(); it++) {
|
|
218
218
|
const std::string fName = (*it)->getName().str();
|
|
219
219
|
if(fName.find(CXT_THREAD) != std::string::npos) {
|
|
@@ -248,7 +248,7 @@ bool MTAResultValidator::collectTCTTargets()
|
|
|
248
248
|
{
|
|
249
249
|
|
|
250
250
|
// Collect call sites of all TCT_ACCESS function calls.
|
|
251
|
-
const Function *F;
|
|
251
|
+
const Function *F = nullptr;
|
|
252
252
|
for(auto it = getModule()->llvmFunBegin(); it != getModule()->llvmFunEnd(); it++) {
|
|
253
253
|
const std::string fName = (*it)->getName().str();
|
|
254
254
|
if(fName.find(TCT_ACCESS) != std::string::npos) {
|
|
@@ -281,7 +281,7 @@ bool MTAResultValidator::collectInterleavingTargets()
|
|
|
281
281
|
{
|
|
282
282
|
|
|
283
283
|
// Collect call sites of all INTERLEV_ACCESS function calls.
|
|
284
|
-
const Function *F;
|
|
284
|
+
const Function *F = nullptr;
|
|
285
285
|
for(auto it = getModule()->llvmFunBegin(); it != getModule()->llvmFunEnd(); it++) {
|
|
286
286
|
const std::string fName = (*it)->getName().str();
|
|
287
287
|
if(fName.find(INTERLEV_ACCESS) != std::string::npos) {
|
package/lib/MTA/TCT.cpp
CHANGED
|
@@ -474,7 +474,6 @@ void TCT::pushCxt(CallStrCxt& cxt, const Instruction* call, const Function* call
|
|
|
474
474
|
{
|
|
475
475
|
|
|
476
476
|
const Function* caller = call->getParent()->getParent();
|
|
477
|
-
const SVFFunction* svfcaller = getSVFFun(caller);
|
|
478
477
|
const SVFFunction* svfcallee = getSVFFun(callee);
|
|
479
478
|
CallSiteID csId = tcg->getCallSiteID(getCallICFGNode(call), svfcallee);
|
|
480
479
|
|
|
@@ -72,7 +72,7 @@ const std::string PointerAnalysis::aliasTestFailNoAliasMangled = "_Z20EXPECTEDF
|
|
|
72
72
|
* Constructor
|
|
73
73
|
*/
|
|
74
74
|
PointerAnalysis::PointerAnalysis(SVFIR* p, PTATY ty, bool alias_check) :
|
|
75
|
-
svfMod(nullptr),ptaTy(ty),stat(nullptr),ptaCallGraph(nullptr),callGraphSCC(nullptr),icfg(nullptr),
|
|
75
|
+
svfMod(nullptr),ptaTy(ty),stat(nullptr),ptaCallGraph(nullptr),callGraphSCC(nullptr),icfg(nullptr),chgraph(nullptr),typeSystem(nullptr)
|
|
76
76
|
{
|
|
77
77
|
pag = p;
|
|
78
78
|
OnTheFlyIterBudgetForStat = Options::StatBudget;
|
|
@@ -302,7 +302,6 @@ bool BVDataPTAImpl::readFromFile(const string& filename)
|
|
|
302
302
|
void BVDataPTAImpl::writeToModule()
|
|
303
303
|
{
|
|
304
304
|
auto irAnnotator = std::make_unique<IRAnnotator>();
|
|
305
|
-
auto mainModule = SVF::LLVMModuleSet::getLLVMModuleSet()->getMainLLVMModule();
|
|
306
305
|
|
|
307
306
|
irAnnotator->processAndersenResults(pag, this, true);
|
|
308
307
|
}
|