svf-tools 1.0.355 → 1.0.359
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/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +6 -6
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +2 -4
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/ICFG_8h_source.html +17 -18
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PCG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +52 -50
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +86 -83
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TCT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFG_8h_source.html +6 -6
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +234 -234
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +48 -51
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +27 -29
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +87 -87
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +99 -99
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StInfo-members.html +20 -15
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +239 -89
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +6 -4
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +178 -130
- package/SVF-doxygen/html/html/classSVF_1_1TCT-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +6 -6
- package/SVF-doxygen/html/html/functions_a.html +13 -13
- package/SVF-doxygen/html/html/functions_e.html +3 -0
- package/SVF-doxygen/html/html/functions_f.html +15 -20
- package/SVF-doxygen/html/html/functions_func.html +13 -13
- package/SVF-doxygen/html/html/functions_func_g.html +51 -50
- package/SVF-doxygen/html/html/functions_func_s.html +8 -5
- package/SVF-doxygen/html/html/functions_g.html +45 -44
- package/SVF-doxygen/html/html/functions_i.html +3 -3
- package/SVF-doxygen/html/html/functions_l.html +6 -6
- package/SVF-doxygen/html/html/functions_n.html +6 -0
- package/SVF-doxygen/html/html/functions_p.html +9 -9
- package/SVF-doxygen/html/html/functions_r.html +2 -4
- package/SVF-doxygen/html/html/functions_s.html +22 -19
- package/SVF-doxygen/html/html/functions_t.html +7 -7
- package/SVF-doxygen/html/html/functions_vars_e.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_f.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_n.html +6 -0
- package/SVF-doxygen/html/html/search/all_1.js +6 -6
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +9 -8
- package/SVF-doxygen/html/html/search/all_14.js +4 -4
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +1 -1
- package/SVF-doxygen/html/html/search/all_5.js +1 -0
- package/SVF-doxygen/html/html/search/all_6.js +0 -1
- package/SVF-doxygen/html/html/search/all_7.js +18 -19
- package/SVF-doxygen/html/html/search/all_9.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +4 -2
- package/SVF-doxygen/html/html/search/functions_0.js +6 -6
- package/SVF-doxygen/html/html/search/functions_10.js +1 -0
- package/SVF-doxygen/html/html/search/functions_6.js +18 -19
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +2 -2
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_5.js +1 -0
- package/SVF-doxygen/html/html/search/variables_6.js +0 -1
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +3 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +2 -2
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +2 -2
- package/include/Graphs/ICFG.h +18 -18
- package/include/Graphs/ICFGNode.h +2 -2
- package/include/Graphs/SVFG.h +4 -4
- package/include/Graphs/SVFGOPT.h +2 -2
- package/include/Graphs/VFG.h +7 -7
- package/include/MTA/LockResultValidator.h +1 -1
- package/include/MTA/MHP.h +2 -2
- package/include/MTA/PCG.h +2 -2
- package/include/MTA/TCT.h +2 -2
- package/include/MemoryModel/SVFIR.h +2 -2
- package/include/MemoryModel/SymbolTableInfo.h +37 -41
- package/include/SVF-FE/ICFGBuilder.h +5 -5
- package/include/SVF-FE/SVFIRBuilder.h +1 -1
- package/lib/Graphs/ICFG.cpp +23 -23
- package/lib/Graphs/SVFG.cpp +4 -4
- package/lib/Graphs/VFG.cpp +3 -3
- package/lib/MSSA/MemRegion.cpp +7 -7
- package/lib/MSSA/MemSSA.cpp +3 -3
- package/lib/MTA/LockAnalysis.cpp +4 -4
- package/lib/MTA/MTAResultValidator.cpp +1 -1
- package/lib/MTA/PCG.cpp +1 -1
- package/lib/MTA/TCT.cpp +2 -2
- package/lib/MemoryModel/LocationSet.cpp +42 -37
- package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
- package/lib/MemoryModel/SymbolTableInfo.cpp +71 -8
- package/lib/SABER/LeakChecker.cpp +3 -3
- package/lib/SVF-FE/CallGraphBuilder.cpp +4 -4
- package/lib/SVF-FE/ICFGBuilder.cpp +19 -27
- package/lib/SVF-FE/SVFIRBuilder.cpp +15 -15
- package/lib/WPA/Andersen.cpp +3 -3
- package/lib/WPA/WPAPass.cpp +4 -4
- package/package.json +1 -1
- package/tools/Example/svf-ex.cpp +1 -1
|
@@ -66,91 +66,93 @@ $(function() {
|
|
|
66
66
|
<div class="title">SymbolTableInfo.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="SymbolTableInfo_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">//===- SymbolTableInfo.cpp -- Symbol information from IR------------------------//</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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * SymbolTableInfo.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Created on: Nov 11, 2013</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <memory></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="SymbolTableInfo_8h.html">MemoryModel/SymbolTableInfo.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a>* SymbolTableInfo::dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::symInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> StInfo::maxFieldLimit = 0;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/*</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"> * Initial the memory object here (for a dummy object)</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> */</span></div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a76971ba9b579907ef937cd7adda89562"> 49</a></span> <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* SymbolTableInfo::createObjTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* typeInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>(StInfo::getMaxFieldLimit(),type);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  typeInfo-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78">analyzeHeapObjType</a>(type);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> typeInfo;</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="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11"> 59</a></span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::SymbolInfo()</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (symInfo == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  symInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  symInfo->setModelConstants(Options::ModelConsts);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> symInfo;</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> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462"> 72</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</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>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(typeToFieldInfo.find(ty) == typeToFieldInfo.end() && <span class="stringliteral">"this type has been collected before"</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>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast<ArrayType>(ty))</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  collectArrayInfo(aty);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* sty = SVFUtil::dyn_cast<StructType>(ty))</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  collectStructInfo(sty);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  collectSimpleTypeInfo(ty);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e"> 88</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectArrayInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* ty)</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>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> out_num = ty->getNumElements();</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = ty->getElementType();</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast<ArrayType>(elemTy))</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>  out_num *= aty->getNumElements();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  elemTy = aty->getElementType();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</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>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(out_num);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a5e46da2adce317d2cf58640d06d6b349">addFldWithType</a>(0, elemTy, 0);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = getStructInfo(elemTy);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < nfE; j++)</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="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* fieldTy = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(idx, fieldTy);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804"> 122</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectStructInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  typeToFieldInfo[sty] = stinfo;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="comment">// Number of fields after flattening the struct</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf = 0;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="comment">// The offset when considering array stride info</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">for</span> (StructType::element_iterator it = sty->element_begin(), ie =</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  sty->element_end(); it != ie; ++it)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *et = *it;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a5e46da2adce317d2cf58640d06d6b349">addFldWithType</a>(nf, et, strideOffset);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StructType>(et) || SVFUtil::isa<ArrayType>(et))</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> * subStinfo = getStructInfo(et);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">//Copy ST's info, whose element 0 is the size of ST itself.</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < nfE; j++)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx = nf + subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(fldIdx, elemTy);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  nf += nfE;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  strideOffset += nfE * subStinfo-><a class="code" href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">getStride</a>();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">else</span> <span class="comment">//simple type</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(nf, et);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  nf += 1;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  strideOffset += 1;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="comment">//Record the size of the complete struct and update max_struct.</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (nf > maxStSize)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  maxStruct = sty;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  maxStSize = nf;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad"> 175</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectSimpleTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a5e46da2adce317d2cf58640d06d6b349">addFldWithType</a>(0, ty, 0);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(0, ty);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee"> 191</a></span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> SymbolTableInfo::getModulusOffset(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <a class="code" href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">s64_t</a> offset = ls.<a class="code" href="classSVF_1_1LocationSet.html#ab987c41ffdae931d941f89d03ed09146">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">if</span>(offset < 0)</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"try to create a gep node with negative offset."</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  offset = abs(offset);</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>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxOffset = obj-><a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">if</span> (maxOffset != 0)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  offset = offset % maxOffset;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  offset = 0;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a87cc3289dd69e5378487dd9ae2c9e82e"> 218</a></span> <span class="keywordtype">void</span> SymbolTableInfo::destroy()</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">for</span> (IDToMemMapTy::iterator iter = objMap.begin(); iter != objMap.end();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  ++iter)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span> (iter->second)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">delete</span> iter->second;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">for</span> (TypeToFieldInfoMap::iterator iter = typeToFieldInfo.begin();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  iter != typeToFieldInfo.end(); ++iter)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span> (iter->second)</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keyword">delete</span> iter->second;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">if</span>(dl){</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">delete</span> dl;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span>(mod){</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">delete</span> mod;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  mod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a65a7e9d6d238a04291cb7d0aa15ece90"> 247</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isNullPtrSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> {</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* v = SVFUtil::dyn_cast<Constant>(val))</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">return</span> v->isNullValue() && v->getType()->isPointerTy();</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab15112d3900f28525848cbe5fad37deb"> 259</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isBlackholeSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">return</span> (SVFUtil::isa<UndefValue>(val));</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35"> 267</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isConstantObjSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> {</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* v = SVFUtil::dyn_cast<GlobalVariable>(val))</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(v))</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!v->hasInitializer()){</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span>(v->isExternalLinkage(v->getLinkage()))</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> *stInfo = getStructInfo(v->getInitializer()->getType());</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">const</span> std::vector<FlattenedFieldInfo> &fields = stInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keywordflow">for</span> (std::vector<FlattenedFieldInfo>::const_iterator it = fields.begin(), eit = fields.end(); it != eit; ++it)</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> &field = *it;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *elemTy = field.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa<FunctionType>(elemTy) && <span class="stringliteral">"Initializer of a global is a function?"</span>);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PointerType>(elemTy))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">return</span> v->isConstant();</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">SVFUtil::isConstantData</a>(val);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776"> 299</a></span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createBlkObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isBlkObj(symId));</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  objMap[symId] = obj;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e"> 308</a></span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createConstantObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isConstantObj(symId));</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  objMap[symId] = obj;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18"> 317</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createDummyObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end() && <span class="stringliteral">"this dummy obj has been created before"</span>);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo(type));</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  objMap[symId] = memObj;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">return</span> memObj;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a487561309c56e6ed2e5a0e94c94b0e7a"> 326</a></span> <span class="keyword">const</span> std::vector<u32_t>& SymbolTableInfo::getFlattenedOffsetVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *T)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedOffsetVec();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div><div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#af0477d1e8af9ad51a9884e687fcdf29b"> 332</a></span> <span class="keyword">const</span> std::vector<u32_t>& SymbolTableInfo::getFlattenedFieldIdxVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *T)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedFieldIdxVec();</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0"> 337</a></span> <span class="keyword">const</span> std::vector<FlattenedFieldInfo>& SymbolTableInfo::getFlattenedFieldInfoVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedFieldInfoVec();</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49"> 342</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getOriginalFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keywordflow">return</span> getStructInfoIter(baseType)->second->getOriginalFieldType(field_idx);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a666d1dff7a629bd34abbd2031c1037a4"> 347</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getFlatternedFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx){</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">return</span> getStructInfoIter(baseType)->second->getFlatternedFieldType(field_idx);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">/*</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="comment"> * Print out the composite type information</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="comment"> */</span></div><div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737"> 354</a></span> <span class="keywordtype">void</span> SymbolTableInfo::printFlattenFields(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *at = SVFUtil::dyn_cast<ArrayType> (type))</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  at->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\tarray type "</span>;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t [element size = "</span> << getTypeSizeInBytes(at->getElementType()) << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  }</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *st = SVFUtil::dyn_cast<StructType> (type))</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  st->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  std::vector<FlattenedFieldInfo>& finfo = getStructInfo(st)->getFlattenedFieldInfoVec();</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordtype">int</span> field_idx = 0;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">for</span>(std::vector<FlattenedFieldInfo>::iterator it = finfo.begin(), eit = finfo.end();</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  it!=eit; ++it, field_idx++)</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" \tField_idx = "</span> << (*it).getFlattenFldIdx();</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">", field type: "</span>;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  (*it).getFlattenElemTy()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">", field size: "</span> << getTypeSizeInBytes((*it).getFlattenElemTy());</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  }</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* pt= SVFUtil::dyn_cast<PointerType> (type))</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sizeInBits = getTypeSizeInBytes(type);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(pt->getElementType());</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  pt->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [pointer size = "</span> << sizeInBits << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [target size = "</span> << eSize << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* fu= SVFUtil::dyn_cast<FunctionType> (type))</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  fu->getReturnType()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"(Function)}\n\n"</span>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type->isSingleValueType() && <span class="stringliteral">"not a single value type, then what else!!"</span>);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(type);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  type->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [object size = "</span> << eSize << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div><div class="line"><a name="l00418"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e"> 418</a></span> std::string SymbolTableInfo::toString(<a class="code" href="classSVF_1_1SymbolTableInfo.html#afd2cf6ef6d7f2a583c709a72067be89b">SYMTYPE</a> symtype)</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> {</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">switch</span> (symtype) {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">case</span> SYMTYPE::BlackHole: {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BlackHole"</span>;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">case</span> SYMTYPE::ConstantObj: {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ConstantObj"</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">case</span> SYMTYPE::BlkPtr: {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BlkPtr"</span>;</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">case</span> SYMTYPE::NullPtr: {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">return</span> <span class="stringliteral">"NullPtr"</span>;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">case</span> SYMTYPE::ValSymbol: {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ValSym"</span>;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">case</span> SYMTYPE::ObjSymbol: {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ObjSym"</span>;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">case</span> SYMTYPE::RetSymbol: {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">return</span> <span class="stringliteral">"RetSym"</span>;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordflow">case</span> SYMTYPE::VarargSymbol: {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VarargSym"</span>;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  }</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">default</span>: {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Invalid SYMTYPE"</span>;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div><div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9"> 451</a></span> <span class="keywordtype">void</span> SymbolTableInfo::dump()</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap<SymID, Value*></a> idmap;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> maxid = 0;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = valSymMap.begin(); iter != valSymMap.end();</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  ++iter)</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  {</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  idmap[i] = val;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = objSymMap.begin(); iter != objSymMap.end();</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  ++iter)</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  idmap[i] = val;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = returnSymMap.begin(); iter != returnSymMap.end();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  ++iter)</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  idmap[i] = val;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = varargSymMap.begin(); iter != varargSymMap.end();</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  ++iter)</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  idmap[i] = val;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"{SymbolTableInfo \n"</span>;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : idmap) {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << iter.first << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(iter.second) << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="comment">/*</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="comment"> * Get the type size given a target data layout</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="comment"> */</span></div><div class="line"><a name="l00497"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#af4239ff717303dee25f1f4ba60070f9e"> 497</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> {</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="comment">// if the type has size then simply return it, otherwise just return 0</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordflow">if</span>(type->isSized())</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">return</span> getDataLayout(LLVMModuleSet::getLLVMModuleSet()->getMainLLVMModule())->getTypeStoreSize(const_cast<Type*>(type));</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00507"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ada63ac47515daa4402914083058baec8"> 507</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">StructLayout</a> *stTySL = getDataLayout(LLVMModuleSet::getLLVMModuleSet()->getMainLLVMModule())->getStructLayout( const_cast<StructType *>(sty) );</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">if</span>(sty->isOpaque())</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">return</span> stTySL->getElementOffset(field_idx);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78"> 523</a></span> <span class="keywordtype">void</span> ObjTypeInfo::analyzeHeapObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  setFlag(HEAP_OBJ);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div><div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#aa8b97a2cbd2de56b3c6c5c0e2e0a2211"> 534</a></span> <span class="keywordtype">void</span> ObjTypeInfo::analyzeStaticObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> {</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  setFlag(STATIC_OBJ);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> }</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac"> 545</a></span> <span class="keywordtype">bool</span> ObjTypeInfo::isNonPtrFieldObj(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">if</span> (isHeap() || isStaticObj())</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ety = getType();</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *AT= SVFUtil::dyn_cast<ArrayType>(ety))</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  ety = AT->getElementType();</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StructType>(ety) || SVFUtil::isa<ArrayType>(ety))</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordtype">bool</span> hasIntersection = <span class="keyword">false</span>;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keyword">const</span> vector<FlattenedFieldInfo> &infovec = SymbolTableInfo::SymbolInfo()->getFlattenedFieldInfoVec(ety);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  vector<FlattenedFieldInfo>::const_iterator it = infovec.begin();</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  vector<FlattenedFieldInfo>::const_iterator eit = infovec.end();</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keywordflow">for</span> (; it != eit; ++it)</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a>& fieldLS = *it;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">if</span> (ls.<a class="code" href="classSVF_1_1LocationSet.html#a0e1cddc4228e310c95f68c661c7b94c8">intersects</a>(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(fieldLS)))</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  hasIntersection = <span class="keyword">true</span>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">if</span> (fieldLS.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>()->isPointerTy())</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(hasIntersection && <span class="stringliteral">"cannot find field of specified offset"</span>);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  {</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">if</span> (isStaticObj() || isHeap())</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="comment">// TODO: Objects which cannot find proper field for a certain offset including</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="comment">// arguments in main(), static objects allocated before main and heap</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="comment">// objects. Right now they're considered to have infinite fields and we</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="comment">// treat each field as pointers conservatively.</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="comment">// Try to model static and heap objects more accurately in the future.</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="comment">// TODO: Using new memory model (locMM) may create objects with spurious offset</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="comment">// as we simply return new offset by mod operation without checking its</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="comment">// correctness in LocSymTableInfo::getModulusOffset(). So the following</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="comment">// assertion may fail. Try to refine the new memory model.</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="comment">//assert(ls.getConstantFieldIdx() == 0 && "cannot get a field from a non-struct type");</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">return</span> (hasPtrObj() == <span class="keyword">false</span>);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> }</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span> </div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca"> 602</a></span> <span class="keywordtype">void</span> MemObj::setFieldSensitive()</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span> {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  typeInfo->setMaxFieldOffsetLimit(StInfo::getMaxFieldLimit());</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> }</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> </div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1"> 611</a></span> MemObj::MemObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* ti, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val) :</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  symId(id), refVal(val), typeInfo(ti)</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> {</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div><div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c"> 619</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">MemObj::isBlackHoleObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keyword"></span>{</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SymbolTableInfo::isBlkObj</a>(<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> }</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> </div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div><div class="line"><a name="l00626"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216"> 626</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">MemObj::getType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keyword"></span>{</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* type = SVFUtil::dyn_cast<PointerType>(<a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>()))</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">return</span> type->getElementType();</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>() && SVFUtil::isa<Instruction>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a973113323e30a01fd904b35ac18d40ce">SVFUtil::getTypeOfHeapAlloc</a>(SVFUtil::cast<Instruction>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()));</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> }</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment">/*</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="comment"> * Destroy the fields of the memory object</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment"> */</span></div><div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735"> 643</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">MemObj::destroy</a>()</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> {</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span> }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00650"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88"> 650</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">MemObj::getMaxFieldOffsetLimit</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keyword"></span>{</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> }</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> </div><div class="line"><a name="l00656"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc"> 656</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">MemObj::isFieldInsensitive</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keyword"></span>{</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>() == 0;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div><div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c"> 662</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">MemObj::setFieldInsensitive</a>()</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span> {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">setMaxFieldOffsetLimit</a>(0);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> }</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div><div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b"> 667</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">MemObj::isFunction</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keyword"></span>{</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">isFunction</a>();</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div><div class="line"><a name="l00672"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4"> 672</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">MemObj::isGlobalObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keyword"></span>{</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">isGlobalObj</a>();</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> }</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span> </div><div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e"> 677</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">MemObj::isStaticObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keyword"></span>{</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">isStaticObj</a>();</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span> }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div><div class="line"><a name="l00682"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee"> 682</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">MemObj::isStack</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keyword"></span>{</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">isStack</a>();</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span> </div><div class="line"><a name="l00687"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1"> 687</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">MemObj::isHeap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="keyword"></span>{</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">isHeap</a>();</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div><div class="line"><a name="l00692"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286"> 692</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">MemObj::isStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="keyword"></span>{</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">isStruct</a>();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> </div><div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af"> 697</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">MemObj::isArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keyword"></span>{</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">isArray</a>();</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span> }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div><div class="line"><a name="l00702"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf"> 702</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">MemObj::isVarStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="keyword"></span>{</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">isVarStruct</a>();</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span> }</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div><div class="line"><a name="l00707"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6"> 707</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">MemObj::isVarArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keyword"></span>{</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">isVarArray</a>();</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span> }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f"> 712</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f">MemObj::isConstantStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keyword"></span>{</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a41f916ab4e3a2c163fca636eae948ce7">isConstantStruct</a>();</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span> }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> </div><div class="line"><a name="l00717"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb"> 717</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb">MemObj::isConstantArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keyword"></span>{</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac1ee7a720959c0e97496870d6e759212">isConstantArray</a>();</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> }</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div><div class="line"><a name="l00722"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0"> 722</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">MemObj::isConstDataOrConstGlobal</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keyword"></span>{</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a8e6c60978df9828c1dcb54086e83edc1">isConstDataOrConstGlobal</a>();</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> }</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span> </div><div class="line"><a name="l00727"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16"> 727</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16">MemObj::isConstantData</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keyword"></span>{</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a6f6c80f7d067a6082a9af04d2547cf34">isConstantData</a>();</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span> }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div><div class="line"><a name="l00732"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082"> 732</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">MemObj::hasPtrObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="keyword"></span>{</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</a>();</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> }</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div><div class="line"><a name="l00737"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e"> 737</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">MemObj::isNonPtrFieldObj</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)<span class="keyword"> const</span></div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="keyword"></span>{</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">isNonPtrFieldObj</a>(ls);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span> }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div><div class="line"><a name="l00742"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7"> 742</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7">MemObj::toString</a>()<span class="keyword"> const</span>{</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  std::string str;</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  rawstr << <span class="stringliteral">"MemObj : "</span> << <a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>())<< <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span> }</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div><div class="ttc" id="classSVF_1_1MemObj_html_a750770ea992d39b22c8b2dda9aff2eaf"><div class="ttname"><a href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">SVF::MemObj::typeInfo</a></div><div class="ttdeci">ObjTypeInfo * typeInfo</div><div class="ttdoc">Type information of this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00427">SymbolTableInfo.h:427</a></div></div>
|
|
70
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a132df66e2751e5db6b0ba82d767a3286"><div class="ttname"><a href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">SVF::MemObj::isStruct</a></div><div class="ttdeci">bool isStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
71
|
-
<div class="ttc" id="
|
|
69
|
+
<a href="SymbolTableInfo_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">//===- SymbolTableInfo.cpp -- Symbol information from IR------------------------//</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> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * SymbolTableInfo.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Created on: Nov 11, 2013</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <memory></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="SymbolTableInfo_8h.html">MemoryModel/SymbolTableInfo.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a>* SymbolTableInfo::dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::symInfo = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> StInfo::maxFieldLimit = 0;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986"> 48</a></span> <span class="keywordtype">void</span> StInfo::addFldWithType(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemIdx)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  fldIdxVec.push_back(fldIdx);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  elemIdxVec.push_back(elemIdx);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  fldIdx2TypeMap[fldIdx] = type;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">//{@</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1StInfo.html#acf1ba3bc3ffbd2f7d457b613b6c5f4be"> 59</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* StInfo::getOriginalFieldType(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<u32_t, const Type*>::const_iterator</a> it = fldIdx2TypeMap.find(fldIdx);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">if</span>(it!=fldIdx2TypeMap.end())</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1StInfo.html#aecd92dab41e8200a5dd4a10085ad882b"> 66</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* StInfo::getFlatternedFieldType(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx)</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>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a>& fallenedFld : finfo){</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">if</span>(fallenedFld.getFlattenFldIdx() == fldIdx)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> fallenedFld.getFlattenElemTy();</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> <span class="keyword">nullptr</span>;</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"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aeb3f594076c60fc313c29d282f347f08"> 75</a></span> SymbolTableInfo::TypeToFieldInfoMap::iterator SymbolTableInfo::getStructInfoIter(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(T);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  TypeToFieldInfoMap::iterator it = typeToFieldInfo.find(T);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span> (it != typeToFieldInfo.end())</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> it;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  collectTypeInfo(T);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> typeToFieldInfo.find(T);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">/*</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"> * Initial the memory object here (for a dummy object)</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> */</span></div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a76971ba9b579907ef937cd7adda89562"> 91</a></span> <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* SymbolTableInfo::createObjTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* typeInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>(StInfo::getMaxFieldLimit(),type);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  typeInfo-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78">analyzeHeapObjType</a>(type);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">return</span> typeInfo;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11"> 101</a></span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* SymbolTableInfo::SymbolInfo()</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>  <span class="keywordflow">if</span> (symInfo == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  symInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  symInfo->setModelConstants(Options::ModelConsts);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">return</span> symInfo;</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> </div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa99cab5480116905dd41ab0ad24b9462"> 114</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(typeToFieldInfo.find(ty) == typeToFieldInfo.end() && <span class="stringliteral">"this type has been collected before"</span>);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast<ArrayType>(ty))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  collectArrayInfo(aty);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* sty = SVFUtil::dyn_cast<StructType>(ty))</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  collectStructInfo(sty);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  collectSimpleTypeInfo(ty);</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> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aea1c4ec32c307feb5da455a41cc51b5e"> 130</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectArrayInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* ty)</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>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalElemNum = ty->getNumElements();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = ty->getElementType();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast<ArrayType>(elemTy))</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  totalElemNum *= aty->getNumElements();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  elemTy = aty->getElementType();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(totalElemNum);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = getStructInfo(elemTy);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < nfE; j++)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* fieldTy = elemStInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(idx, fieldTy);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> outArrayElemNum = ty->getNumElements();</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < outArrayElemNum; i++)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, elemTy, (i * nfE * totalElemNum)/outArrayElemNum);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nfE, nfE * totalElemNum);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5297b79a02d8afce647a8b61bdab804"> 169</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectStructInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  typeToFieldInfo[sty] = stinfo;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="comment">// Number of fields after flattening the struct</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf = 0;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="comment">// The offset when considering array stride info</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">for</span> (StructType::element_iterator it = sty->element_begin(), ie =</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  sty->element_end(); it != ie; ++it)</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *et = *it;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(nf, et, strideOffset);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StructType>(et) || SVFUtil::isa<ArrayType>(et))</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> * subStinfo = getStructInfo(et);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().size();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">//Copy ST's info, whose element 0 is the size of ST itself.</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < nfE; j++)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fldIdx = nf + subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenFldIdx();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = subStinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>()[j].getFlattenElemTy();</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(fldIdx, elemTy);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  nf += nfE;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  strideOffset += nfE * subStinfo-><a class="code" href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">getStride</a>();</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>  <span class="keywordflow">else</span> <span class="comment">//simple type</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(nf, et);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  nf += 1;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  strideOffset += 1;</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="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nf,strideOffset);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">//Record the size of the complete struct and update max_struct.</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (nf > maxStSize)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  maxStruct = sty;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  maxStSize = nf;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#abf7567c655499d6744de8df689c11fad"> 224</a></span> <span class="keywordtype">void</span> SymbolTableInfo::collectSimpleTypeInfo(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  typeToFieldInfo[ty] = stinfo;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">addFldWithType</a>(0, ty, 0);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> field(0, ty);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>().push_back(field);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  stinfo-><a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1,1);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee"> 242</a></span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> SymbolTableInfo::getModulusOffset(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <a class="code" href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">s64_t</a> offset = ls.<a class="code" href="classSVF_1_1LocationSet.html#ab987c41ffdae931d941f89d03ed09146">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">if</span>(offset < 0)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"try to create a gep node with negative offset."</span>);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  offset = abs(offset);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxOffset = obj-><a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span> (maxOffset != 0)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  offset = offset % maxOffset;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  offset = 0;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a87cc3289dd69e5378487dd9ae2c9e82e"> 269</a></span> <span class="keywordtype">void</span> SymbolTableInfo::destroy()</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">for</span> (IDToMemMapTy::iterator iter = objMap.begin(); iter != objMap.end();</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  ++iter)</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (iter->second)</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">delete</span> iter->second;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">for</span> (TypeToFieldInfoMap::iterator iter = typeToFieldInfo.begin();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  iter != typeToFieldInfo.end(); ++iter)</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">if</span> (iter->second)</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">delete</span> iter->second;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">if</span>(dl){</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keyword">delete</span> dl;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  dl = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">if</span>(mod){</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keyword">delete</span> mod;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  mod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a65a7e9d6d238a04291cb7d0aa15ece90"> 298</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isNullPtrSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> {</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* v = SVFUtil::dyn_cast<Constant>(val))</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">return</span> v->isNullValue() && v->getType()->isPointerTy();</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab15112d3900f28525848cbe5fad37deb"> 310</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isBlackholeSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">return</span> (SVFUtil::isa<UndefValue>(val));</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35"> 318</a></span> <span class="keywordtype">bool</span> SymbolTableInfo::isConstantObjSym(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* v = SVFUtil::dyn_cast<GlobalVariable>(val))</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(v))</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!v->hasInitializer()){</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">if</span>(v->isExternalLinkage(v->getLinkage()))</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <a class="code" href="classSVF_1_1StInfo.html">StInfo</a> *stInfo = getStructInfo(v->getInitializer()->getType());</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keyword">const</span> std::vector<FlattenedFieldInfo> &fields = stInfo-><a class="code" href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">getFlattenedFieldInfoVec</a>();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">for</span> (std::vector<FlattenedFieldInfo>::const_iterator it = fields.begin(), eit = fields.end(); it != eit; ++it)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a> &field = *it;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *elemTy = field.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>();</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa<FunctionType>(elemTy) && <span class="stringliteral">"Initializer of a global is a function?"</span>);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PointerType>(elemTy))</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">return</span> v->isConstant();</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">SVFUtil::isConstantData</a>(val);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a6ddf057415f641bd8ad15bded1415776"> 350</a></span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createBlkObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isBlkObj(symId));</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  objMap[symId] = obj;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ab5c9d593aa68c7150cd382db230eec3e"> 359</a></span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createConstantObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(isConstantObj(symId));</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end());</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo());</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  objMap[symId] = obj;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">return</span> obj;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18"> 368</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* SymbolTableInfo::createDummyObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> symId, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(objMap.find(symId)==objMap.end() && <span class="stringliteral">"this dummy obj has been created before"</span>);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>(symId, createObjTypeInfo(type));</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  objMap[symId] = memObj;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">return</span> memObj;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a747073d433e05e15085a2675f6a1e18f"> 377</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getNumOfFlattenElements(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getNumOfFlattenElements();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> }</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a5ef16ff6a5787d89fd3f829bf518cf87"> 383</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getNumOfFlattenFields(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *T)</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getNumOfFlattenFields();</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> }</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a439024050e7b78021259ca5a2d68a83f"> 389</a></span> <span class="keyword">const</span> std::vector<u32_t>& SymbolTableInfo::getFlattenedElemIdxVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedElemIdxVec();</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#af0477d1e8af9ad51a9884e687fcdf29b"> 395</a></span> <span class="keyword">const</span> std::vector<u32_t>& SymbolTableInfo::getFlattenedFieldIdxVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *T)</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> {</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedFieldIdxVec();</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0"> 400</a></span> <span class="keyword">const</span> std::vector<FlattenedFieldInfo>& SymbolTableInfo::getFlattenedFieldInfoVec(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">return</span> getStructInfoIter(T)->second->getFlattenedFieldInfoVec();</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a866085ff37b7841606c523817c621f49"> 405</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getOriginalFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">return</span> getStructInfoIter(baseType)->second->getOriginalFieldType(field_idx);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a666d1dff7a629bd34abbd2031c1037a4"> 410</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* SymbolTableInfo::getFlatternedFieldType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* baseType, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx){</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">return</span> getStructInfoIter(baseType)->second->getFlatternedFieldType(field_idx);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="comment">/*</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="comment"> * Print out the composite type information</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="comment"> */</span></div><div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#aa40ff2fcaba3d4297d63269b74738737"> 417</a></span> <span class="keywordtype">void</span> SymbolTableInfo::printFlattenFields(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *at = SVFUtil::dyn_cast<ArrayType> (type))</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  at->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\tarray type "</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t [element size = "</span> << getTypeSizeInBytes(at->getElementType()) << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *st = SVFUtil::dyn_cast<StructType> (type))</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  st->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  std::vector<FlattenedFieldInfo>& finfo = getStructInfo(st)->getFlattenedFieldInfoVec();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordtype">int</span> field_idx = 0;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">for</span>(std::vector<FlattenedFieldInfo>::iterator it = finfo.begin(), eit = finfo.end();</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  it!=eit; ++it, field_idx++)</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" \tField_idx = "</span> << (*it).getFlattenFldIdx();</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">", field type: "</span>;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  (*it).getFlattenElemTy()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">", field size: "</span> << getTypeSizeInBytes((*it).getFlattenElemTy());</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* pt= SVFUtil::dyn_cast<PointerType> (type))</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sizeInBits = getTypeSizeInBytes(type);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(pt->getElementType());</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  pt->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [pointer size = "</span> << sizeInBits << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [target size = "</span> << eSize << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* fu= SVFUtil::dyn_cast<FunctionType> (type))</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  fu->getReturnType()->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"(Function)}\n\n"</span>;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  {</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type->isSingleValueType() && <span class="stringliteral">"not a single value type, then what else!!"</span>);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> eSize = getTypeSizeInBytes(type);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">" {Type: "</span>;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  type->print(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>());</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() <<<span class="stringliteral">"\t [object size = "</span> << eSize << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00481"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a7d3001549966444622d5918e5811e89e"> 481</a></span> std::string SymbolTableInfo::toString(<a class="code" href="classSVF_1_1SymbolTableInfo.html#afd2cf6ef6d7f2a583c709a72067be89b">SYMTYPE</a> symtype)</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">switch</span> (symtype) {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">case</span> SYMTYPE::BlackHole: {</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BlackHole"</span>;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">case</span> SYMTYPE::ConstantObj: {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ConstantObj"</span>;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">case</span> SYMTYPE::BlkPtr: {</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BlkPtr"</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">case</span> SYMTYPE::NullPtr: {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">return</span> <span class="stringliteral">"NullPtr"</span>;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">case</span> SYMTYPE::ValSymbol: {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ValSym"</span>;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">case</span> SYMTYPE::ObjSymbol: {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ObjSym"</span>;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">case</span> SYMTYPE::RetSymbol: {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordflow">return</span> <span class="stringliteral">"RetSym"</span>;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">case</span> SYMTYPE::VarargSymbol: {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VarargSym"</span>;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">default</span>: {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Invalid SYMTYPE"</span>;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#a9f4cf6914b400b9f69c7852f13c496a9"> 514</a></span> <span class="keywordtype">void</span> SymbolTableInfo::dump()</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span> {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap<SymID, Value*></a> idmap;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> maxid = 0;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = valSymMap.begin(); iter != valSymMap.end();</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  ++iter)</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  idmap[i] = val;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">for</span> (ValueToIDMapTy::iterator iter = objSymMap.begin(); iter != objSymMap.end();</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  ++iter)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  idmap[i] = val;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = returnSymMap.begin(); iter != returnSymMap.end();</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  ++iter)</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  idmap[i] = val;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">for</span> (FunToIDMapTy::iterator iter = varargSymMap.begin(); iter != varargSymMap.end();</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  ++iter)</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  {</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> i = iter->second;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  maxid = max(i, maxid);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*) iter->first;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  idmap[i] = val;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"{SymbolTableInfo \n"</span>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : idmap) {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << iter.first << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(iter.second) << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="comment">/*</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment"> * Get the type size given a target data layout</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment"> */</span></div><div class="line"><a name="l00560"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#af4239ff717303dee25f1f4ba60070f9e"> 560</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> {</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="comment">// if the type has size then simply return it, otherwise just return 0</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">if</span>(type->isSized())</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">return</span> getDataLayout(LLVMModuleSet::getLLVMModuleSet()->getMainLLVMModule())->getTypeStoreSize(const_cast<Type*>(type));</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> }</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classSVF_1_1SymbolTableInfo.html#ada63ac47515daa4402914083058baec8"> 570</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SymbolTableInfo::getTypeSizeInBytes(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> field_idx)</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">StructLayout</a> *stTySL = getDataLayout(LLVMModuleSet::getLLVMModuleSet()->getMainLLVMModule())->getStructLayout( const_cast<StructType *>(sty) );</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">if</span>(sty->isOpaque())</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keywordflow">return</span> stTySL->getElementOffset(field_idx);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78"> 586</a></span> <span class="keywordtype">void</span> ObjTypeInfo::analyzeHeapObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span> {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  setFlag(HEAP_OBJ);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div><div class="line"><a name="l00597"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#aa8b97a2cbd2de56b3c6c5c0e2e0a2211"> 597</a></span> <span class="keywordtype">void</span> ObjTypeInfo::analyzeStaticObjType(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>*)</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="comment">// TODO: Heap and static objects are considered as pointers right now.</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="comment">// Refine this function to get more details about heap and static objects.</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  setFlag(STATIC_OBJ);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  setFlag(HASPTR_OBJ);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span> }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div><div class="line"><a name="l00608"></a><span class="lineno"><a class="line" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac"> 608</a></span> <span class="keywordtype">bool</span> ObjTypeInfo::isNonPtrFieldObj(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keywordflow">if</span> (isHeap() || isStaticObj())</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ety = getType();</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a> *AT= SVFUtil::dyn_cast<ArrayType>(ety))</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  ety = AT->getElementType();</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> </div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StructType>(ety) || SVFUtil::isa<ArrayType>(ety))</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  {</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordtype">bool</span> hasIntersection = <span class="keyword">false</span>;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keyword">const</span> vector<FlattenedFieldInfo> &infovec = SymbolTableInfo::SymbolInfo()->getFlattenedFieldInfoVec(ety);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  vector<FlattenedFieldInfo>::const_iterator it = infovec.begin();</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  vector<FlattenedFieldInfo>::const_iterator eit = infovec.end();</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">for</span> (; it != eit; ++it)</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlattenedFieldInfo.html">FlattenedFieldInfo</a>& fieldLS = *it;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">if</span> (ls.<a class="code" href="classSVF_1_1LocationSet.html#a0e1cddc4228e310c95f68c661c7b94c8">intersects</a>(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(fieldLS)))</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  hasIntersection = <span class="keyword">true</span>;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">if</span> (fieldLS.<a class="code" href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">getFlattenElemTy</a>()->isPointerTy())</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(hasIntersection && <span class="stringliteral">"cannot find field of specified offset"</span>);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  }</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (isStaticObj() || isHeap())</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="comment">// TODO: Objects which cannot find proper field for a certain offset including</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="comment">// arguments in main(), static objects allocated before main and heap</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="comment">// objects. Right now they're considered to have infinite fields and we</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="comment">// treat each field as pointers conservatively.</span></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="comment">// Try to model static and heap objects more accurately in the future.</span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  {</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="comment">// TODO: Using new memory model (locMM) may create objects with spurious offset</span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="comment">// as we simply return new offset by mod operation without checking its</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="comment">// correctness in LocSymTableInfo::getModulusOffset(). So the following</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="comment">// assertion may fail. Try to refine the new memory model.</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="comment">//assert(ls.getConstantFieldIdx() == 0 && "cannot get a field from a non-struct type");</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">return</span> (hasPtrObj() == <span class="keyword">false</span>);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  }</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a981b7424901ef74467f725ffc9fec0ca"> 665</a></span> <span class="keywordtype">void</span> MemObj::setFieldSensitive()</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  typeInfo->setMaxFieldOffsetLimit(StInfo::getMaxFieldLimit());</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#afc62b5dbcaf790e561c852f567ca5bd1"> 674</a></span> MemObj::MemObj(<a class="code" href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SymID</a> <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1ObjTypeInfo.html">ObjTypeInfo</a>* ti, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *val) :</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  symId(id), refVal(val), typeInfo(ti)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span> {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> </div><div class="line"><a name="l00682"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c"> 682</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">MemObj::isBlackHoleObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="keyword"></span>{</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SymbolTableInfo::isBlkObj</a>(<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span> </div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span> </div><div class="line"><a name="l00689"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216"> 689</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">MemObj::getType</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keyword"></span>{</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  {</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* type = SVFUtil::dyn_cast<PointerType>(<a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>()))</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">return</span> type->getElementType();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>() && SVFUtil::isa<Instruction>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a973113323e30a01fd904b35ac18d40ce">SVFUtil::getTypeOfHeapAlloc</a>(SVFUtil::cast<Instruction>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()));</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">getType</a>();</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span> }</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="comment">/*</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="comment"> * Destroy the fields of the memory object</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="comment"> */</span></div><div class="line"><a name="l00706"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735"> 706</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">MemObj::destroy</a>()</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span> }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div><div class="line"><a name="l00713"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88"> 713</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">MemObj::getMaxFieldOffsetLimit</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keyword"></span>{</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> }</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc"> 719</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">MemObj::isFieldInsensitive</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keyword"></span>{</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>() == 0;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span> }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c"> 725</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">MemObj::setFieldInsensitive</a>()</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span> {</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">setMaxFieldOffsetLimit</a>(0);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span> }</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span> </div><div class="line"><a name="l00730"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b"> 730</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">MemObj::isFunction</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="keyword"></span>{</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">isFunction</a>();</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div><div class="line"><a name="l00735"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4"> 735</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">MemObj::isGlobalObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keyword"></span>{</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">isGlobalObj</a>();</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span> </div><div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e"> 740</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">MemObj::isStaticObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="keyword"></span>{</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">isStaticObj</a>();</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span> }</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span> </div><div class="line"><a name="l00745"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee"> 745</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">MemObj::isStack</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keyword"></span>{</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">isStack</a>();</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> }</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span> </div><div class="line"><a name="l00750"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1"> 750</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">MemObj::isHeap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="keyword"></span>{</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">isHeap</a>();</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span> }</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span> </div><div class="line"><a name="l00755"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286"> 755</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">MemObj::isStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keyword"></span>{</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">isStruct</a>();</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span> }</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span> </div><div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af"> 760</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">MemObj::isArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="keyword"></span>{</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">isArray</a>();</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> }</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span> </div><div class="line"><a name="l00765"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf"> 765</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">MemObj::isVarStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keyword"></span>{</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">isVarStruct</a>();</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span> }</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span> </div><div class="line"><a name="l00770"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6"> 770</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">MemObj::isVarArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="keyword"></span>{</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">isVarArray</a>();</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span> }</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span> </div><div class="line"><a name="l00775"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f"> 775</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f">MemObj::isConstantStruct</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="keyword"></span>{</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a41f916ab4e3a2c163fca636eae948ce7">isConstantStruct</a>();</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> }</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span> </div><div class="line"><a name="l00780"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb"> 780</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb">MemObj::isConstantArray</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keyword"></span>{</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac1ee7a720959c0e97496870d6e759212">isConstantArray</a>();</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span> }</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span> </div><div class="line"><a name="l00785"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0"> 785</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">MemObj::isConstDataOrConstGlobal</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="keyword"></span>{</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a8e6c60978df9828c1dcb54086e83edc1">isConstDataOrConstGlobal</a>();</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span> }</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span> </div><div class="line"><a name="l00790"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16"> 790</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16">MemObj::isConstantData</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="keyword"></span>{</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a6f6c80f7d067a6082a9af04d2547cf34">isConstantData</a>();</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> }</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span> </div><div class="line"><a name="l00795"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082"> 795</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">MemObj::hasPtrObj</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keyword"></span>{</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">hasPtrObj</a>();</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span> }</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span> </div><div class="line"><a name="l00800"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e"> 800</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">MemObj::isNonPtrFieldObj</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)<span class="keyword"> const</span></div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="keyword"></span>{</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">typeInfo</a>-><a class="code" href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">isNonPtrFieldObj</a>(ls);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span> }</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span> </div><div class="line"><a name="l00805"></a><span class="lineno"><a class="line" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7"> 805</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7">MemObj::toString</a>()<span class="keyword"> const</span>{</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  std::string str;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  rawstr << <span class="stringliteral">"MemObj : "</span> << <a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVFUtil::value2String</a>(<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>())<< <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span> }</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="ttc" id="classSVF_1_1MemObj_html_a750770ea992d39b22c8b2dda9aff2eaf"><div class="ttname"><a href="classSVF_1_1MemObj.html#a750770ea992d39b22c8b2dda9aff2eaf">SVF::MemObj::typeInfo</a></div><div class="ttdeci">ObjTypeInfo * typeInfo</div><div class="ttdoc">Type information of this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00420">SymbolTableInfo.h:420</a></div></div>
|
|
70
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a132df66e2751e5db6b0ba82d767a3286"><div class="ttname"><a href="classSVF_1_1MemObj.html#a132df66e2751e5db6b0ba82d767a3286">SVF::MemObj::isStruct</a></div><div class="ttdeci">bool isStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00755">SymbolTableInfo.cpp:755</a></div></div>
|
|
71
|
+
<div class="ttc" id="classSVF_1_1StInfo_html_a1a8be773f23b5a5fd36d44698bae9986"><div class="ttname"><a href="classSVF_1_1StInfo.html#a1a8be773f23b5a5fd36d44698bae9986">SVF::StInfo::addFldWithType</a></div><div class="ttdeci">void addFldWithType(u32_t fldIdx, const Type *type, u32_t elemIdx)</div><div class="ttdoc">Add field index and element index and their corresponding type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00048">SymbolTableInfo.cpp:48</a></div></div>
|
|
72
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a7b890ca9e93b1c61cc6437b7e6a82a8c"><div class="ttname"><a href="classSVF_1_1MemObj.html#a7b890ca9e93b1c61cc6437b7e6a82a8c">SVF::MemObj::isBlackHoleObj</a></div><div class="ttdeci">bool isBlackHoleObj() const</div><div class="ttdoc">Whether it is a black hole object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00682">SymbolTableInfo.cpp:682</a></div></div>
|
|
72
73
|
<div class="ttc" id="classSVF_1_1LocationSet_html_ab987c41ffdae931d941f89d03ed09146"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ab987c41ffdae931d941f89d03ed09146">SVF::LocationSet::accumulateConstantFieldIdx</a></div><div class="ttdeci">s64_t accumulateConstantFieldIdx() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00120">LocationSet.h:120</a></div></div>
|
|
73
74
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ad9cdb21e20182f3bc95f04bbb97712f3"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SVF::SymbolTableInfo::isBlkObj</a></div><div class="ttdeci">static bool isBlkObj(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00198">SymbolTableInfo.h:198</a></div></div>
|
|
74
|
-
<div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
75
|
+
<div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00415">SymbolTableInfo.h:415</a></div></div>
|
|
75
76
|
<div class="ttc" id="namespaceSVF_html_a6ec0236303089a01fd9da36a8bb84e0a"><div class="ttname"><a href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">SVF::FunctionType</a></div><div class="ttdeci">llvm::FunctionType FunctionType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00109">BasicTypes.h:109</a></div></div>
|
|
76
77
|
<div class="ttc" id="classSVF_1_1LocationSet_html_a0e1cddc4228e310c95f68c661c7b94c8"><div class="ttname"><a href="classSVF_1_1LocationSet.html#a0e1cddc4228e310c95f68c661c7b94c8">SVF::LocationSet::intersects</a></div><div class="ttdeci">bool intersects(const LocationSet &RHS) const</div><div class="ttdoc">Return TRUE if we share any location in common with RHS. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00146">LocationSet.h:146</a></div></div>
|
|
77
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a26c179394fbda9a9261d0bf3f52b619d"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">SVF::ObjTypeInfo::isHeap</a></div><div class="ttdeci">bool isHeap()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
78
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac1ee7a720959c0e97496870d6e759212"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac1ee7a720959c0e97496870d6e759212">SVF::ObjTypeInfo::isConstantArray</a></div><div class="ttdeci">bool isConstantArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
79
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a9fff869c63776c6ebeff78933e0f6092"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">SVF::ObjTypeInfo::setMaxFieldOffsetLimit</a></div><div class="ttdeci">void setMaxFieldOffsetLimit(u32_t limit)</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
80
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_ae1d14e2bf0be36cdadebf119822f607b"><div class="ttname"><a href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">SVF::MemObj::isFunction</a></div><div class="ttdeci">bool isFunction() const</div><div class="ttdoc">object attributes methods </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
78
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a26c179394fbda9a9261d0bf3f52b619d"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a26c179394fbda9a9261d0bf3f52b619d">SVF::ObjTypeInfo::isHeap</a></div><div class="ttdeci">bool isHeap()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00698">SymbolTableInfo.h:698</a></div></div>
|
|
79
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac1ee7a720959c0e97496870d6e759212"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac1ee7a720959c0e97496870d6e759212">SVF::ObjTypeInfo::isConstantArray</a></div><div class="ttdeci">bool isConstantArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00723">SymbolTableInfo.h:723</a></div></div>
|
|
80
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a9fff869c63776c6ebeff78933e0f6092"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a9fff869c63776c6ebeff78933e0f6092">SVF::ObjTypeInfo::setMaxFieldOffsetLimit</a></div><div class="ttdeci">void setMaxFieldOffsetLimit(u32_t limit)</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00663">SymbolTableInfo.h:663</a></div></div>
|
|
81
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_ae1d14e2bf0be36cdadebf119822f607b"><div class="ttname"><a href="classSVF_1_1MemObj.html#ae1d14e2bf0be36cdadebf119822f607b">SVF::MemObj::isFunction</a></div><div class="ttdeci">bool isFunction() const</div><div class="ttdoc">object attributes methods </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00730">SymbolTableInfo.cpp:730</a></div></div>
|
|
81
82
|
<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="BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
|
|
82
83
|
<div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00083">BasicTypes.h:83</a></div></div>
|
|
83
84
|
<div class="ttc" id="classSVF_1_1FlattenedFieldInfo_html_a92c1b65c36feeabf09541c9af4650f14"><div class="ttname"><a href="classSVF_1_1FlattenedFieldInfo.html#a92c1b65c36feeabf09541c9af4650f14">SVF::FlattenedFieldInfo::getFlattenElemTy</a></div><div class="ttdeci">const Type * getFlattenElemTy() const</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00059">LocationSet.h:59</a></div></div>
|
|
84
85
|
<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>
|
|
85
86
|
<div class="ttc" id="namespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00108">BasicTypes.h:108</a></div></div>
|
|
86
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a40462512a99eb258d8cd442c38d812b4"><div class="ttname"><a href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">SVF::MemObj::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
87
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_af7316c697eafc71d5fc93108da4e2cee"><div class="ttname"><a href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">SVF::MemObj::isStack</a></div><div class="ttdeci">bool isStack() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
88
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a6dae1b3429c6049f0153ec006d329082"><div class="ttname"><a href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">SVF::MemObj::hasPtrObj</a></div><div class="ttdeci">bool hasPtrObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
89
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac99fa14fdf7bc0dd3e9ff36c7a3a351f"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">SVF::ObjTypeInfo::isFunction</a></div><div class="ttdeci">bool isFunction()</div><div class="ttdoc">Object attributes. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
90
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_ab9637ea9acd1f8ae4933b4ab2b997e5c"><div class="ttname"><a href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">SVF::MemObj::setFieldInsensitive</a></div><div class="ttdeci">void setFieldInsensitive()</div><div class="ttdoc">Set the memory object to be field insensitive. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
91
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_aa4fa7a1b86d66692ffffeaee0e187216"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">SVF::MemObj::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get obj type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
87
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a40462512a99eb258d8cd442c38d812b4"><div class="ttname"><a href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">SVF::MemObj::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00735">SymbolTableInfo.cpp:735</a></div></div>
|
|
88
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_af7316c697eafc71d5fc93108da4e2cee"><div class="ttname"><a href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">SVF::MemObj::isStack</a></div><div class="ttdeci">bool isStack() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00745">SymbolTableInfo.cpp:745</a></div></div>
|
|
89
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a6dae1b3429c6049f0153ec006d329082"><div class="ttname"><a href="classSVF_1_1MemObj.html#a6dae1b3429c6049f0153ec006d329082">SVF::MemObj::hasPtrObj</a></div><div class="ttdeci">bool hasPtrObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00795">SymbolTableInfo.cpp:795</a></div></div>
|
|
90
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac99fa14fdf7bc0dd3e9ff36c7a3a351f"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac99fa14fdf7bc0dd3e9ff36c7a3a351f">SVF::ObjTypeInfo::isFunction</a></div><div class="ttdeci">bool isFunction()</div><div class="ttdoc">Object attributes. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00682">SymbolTableInfo.h:682</a></div></div>
|
|
91
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_ab9637ea9acd1f8ae4933b4ab2b997e5c"><div class="ttname"><a href="classSVF_1_1MemObj.html#ab9637ea9acd1f8ae4933b4ab2b997e5c">SVF::MemObj::setFieldInsensitive</a></div><div class="ttdeci">void setFieldInsensitive()</div><div class="ttdoc">Set the memory object to be field insensitive. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00725">SymbolTableInfo.cpp:725</a></div></div>
|
|
92
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_aa4fa7a1b86d66692ffffeaee0e187216"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa4fa7a1b86d66692ffffeaee0e187216">SVF::MemObj::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get obj type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00689">SymbolTableInfo.cpp:689</a></div></div>
|
|
92
93
|
<div class="ttc" id="namespaceSVF_html_a146d286041987860388da3d8bc85cee3"><div class="ttname"><a href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">SVF::ArrayType</a></div><div class="ttdeci">llvm::ArrayType ArrayType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00107">BasicTypes.h:107</a></div></div>
|
|
93
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a7f828731597450f1d43b61413ab0e7bb"><div class="ttname"><a href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb">SVF::MemObj::isConstantArray</a></div><div class="ttdeci">bool isConstantArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
94
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a7f828731597450f1d43b61413ab0e7bb"><div class="ttname"><a href="classSVF_1_1MemObj.html#a7f828731597450f1d43b61413ab0e7bb">SVF::MemObj::isConstantArray</a></div><div class="ttdeci">bool isConstantArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00780">SymbolTableInfo.cpp:780</a></div></div>
|
|
94
95
|
<div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
|
|
95
96
|
<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
|
|
96
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a41f916ab4e3a2c163fca636eae948ce7"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a41f916ab4e3a2c163fca636eae948ce7">SVF::ObjTypeInfo::isConstantStruct</a></div><div class="ttdeci">bool isConstantStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
97
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aca1e900f9b0a774684af77666cf033e3"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">SVF::ObjTypeInfo::isVarArray</a></div><div class="ttdeci">bool isVarArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
98
|
-
<div class="ttc" id="
|
|
99
|
-
<div class="ttc" id="
|
|
97
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a41f916ab4e3a2c163fca636eae948ce7"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a41f916ab4e3a2c163fca636eae948ce7">SVF::ObjTypeInfo::isConstantStruct</a></div><div class="ttdeci">bool isConstantStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00711">SymbolTableInfo.h:711</a></div></div>
|
|
98
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aca1e900f9b0a774684af77666cf033e3"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aca1e900f9b0a774684af77666cf033e3">SVF::ObjTypeInfo::isVarArray</a></div><div class="ttdeci">bool isVarArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00719">SymbolTableInfo.h:719</a></div></div>
|
|
99
|
+
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
|
|
100
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a614b26f4a3db926055a576b13842c1d7"><div class="ttname"><a href="classSVF_1_1MemObj.html#a614b26f4a3db926055a576b13842c1d7">SVF::MemObj::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00805">SymbolTableInfo.cpp:805</a></div></div>
|
|
101
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a019a77516c403f1f3cc72917b810a41f"><div class="ttname"><a href="classSVF_1_1MemObj.html#a019a77516c403f1f3cc72917b810a41f">SVF::MemObj::isConstantStruct</a></div><div class="ttdeci">bool isConstantStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00775">SymbolTableInfo.cpp:775</a></div></div>
|
|
100
102
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
101
103
|
<div class="ttc" id="namespaceSVF_html_abe09d99af006554a5c00803e9a89f9a6"><div class="ttname"><a href="namespaceSVF.html#abe09d99af006554a5c00803e9a89f9a6">SVF::s64_t</a></div><div class="ttdeci">signed s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
|
|
102
104
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a077caa1b10ab84d101d79fc7ea50db2d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(std::string msg)</div><div class="ttdoc">Writes a message run through wrnMsg. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00069">SVFUtil.cpp:69</a></div></div>
|
|
103
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a3594dc1c1943dbac0ab72f2ff163c523"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">SVF::ObjTypeInfo::isStaticObj</a></div><div class="ttdeci">bool isStaticObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
104
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a81bc3d785062c7e527ecf8e564cd52a4"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">SVF::ObjTypeInfo::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit()</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
105
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a0627e8b9dda2e13cc77c334eefab21e1"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">SVF::ObjTypeInfo::isArray</a></div><div class="ttdeci">bool isArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
106
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_aeba6eeed4843a1a90cf1d4b7deb197af"><div class="ttname"><a href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">SVF::MemObj::isArray</a></div><div class="ttdeci">bool isArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
107
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a954eba54eda95e6735eb1d32bd8a276e"><div class="ttname"><a href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">SVF::MemObj::isStaticObj</a></div><div class="ttdeci">bool isStaticObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
105
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a3594dc1c1943dbac0ab72f2ff163c523"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a3594dc1c1943dbac0ab72f2ff163c523">SVF::ObjTypeInfo::isStaticObj</a></div><div class="ttdeci">bool isStaticObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00690">SymbolTableInfo.h:690</a></div></div>
|
|
106
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a81bc3d785062c7e527ecf8e564cd52a4"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a81bc3d785062c7e527ecf8e564cd52a4">SVF::ObjTypeInfo::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit()</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00657">SymbolTableInfo.h:657</a></div></div>
|
|
107
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a0627e8b9dda2e13cc77c334eefab21e1"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a0627e8b9dda2e13cc77c334eefab21e1">SVF::ObjTypeInfo::isArray</a></div><div class="ttdeci">bool isArray()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00727">SymbolTableInfo.h:727</a></div></div>
|
|
108
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_aeba6eeed4843a1a90cf1d4b7deb197af"><div class="ttname"><a href="classSVF_1_1MemObj.html#aeba6eeed4843a1a90cf1d4b7deb197af">SVF::MemObj::isArray</a></div><div class="ttdeci">bool isArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00760">SymbolTableInfo.cpp:760</a></div></div>
|
|
109
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a954eba54eda95e6735eb1d32bd8a276e"><div class="ttname"><a href="classSVF_1_1MemObj.html#a954eba54eda95e6735eb1d32bd8a276e">SVF::MemObj::isStaticObj</a></div><div class="ttdeci">bool isStaticObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00740">SymbolTableInfo.cpp:740</a></div></div>
|
|
108
110
|
<div class="ttc" id="classSVF_1_1FlattenedFieldInfo_html"><div class="ttname"><a href="classSVF_1_1FlattenedFieldInfo.html">SVF::FlattenedFieldInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00045">LocationSet.h:45</a></div></div>
|
|
109
|
-
<div class="ttc" id="classSVF_1_1StInfo_html_af5094ec542f345d214a682d4138cf690"><div class="ttname"><a href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">SVF::StInfo::getStride</a></div><div class="ttdeci">u32_t getStride() const</div><div class="ttdoc">
|
|
111
|
+
<div class="ttc" id="classSVF_1_1StInfo_html_af5094ec542f345d214a682d4138cf690"><div class="ttname"><a href="classSVF_1_1StInfo.html#af5094ec542f345d214a682d4138cf690">SVF::StInfo::getStride</a></div><div class="ttdeci">u32_t getStride() const</div><div class="ttdoc">Return the stride. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00589">SymbolTableInfo.h:589</a></div></div>
|
|
110
112
|
<div class="ttc" id="namespaceSVF_html_a52c8654c221bb53a59f70ea3cb1e5c45"><div class="ttname"><a href="namespaceSVF.html#a52c8654c221bb53a59f70ea3cb1e5c45">SVF::StructLayout</a></div><div class="ttdeci">llvm::StructLayout StructLayout</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00116">BasicTypes.h:116</a></div></div>
|
|
111
113
|
<div class="ttc" id="SymbolTableInfo_8h_html"><div class="ttname"><a href="SymbolTableInfo_8h.html">SymbolTableInfo.h</a></div></div>
|
|
112
114
|
<div class="ttc" id="namespaceSVF_html_a2bf58575ac7d068e0f1a4cf953b9e6cb"><div class="ttname"><a href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">SVF::StructType</a></div><div class="ttdeci">llvm::StructType StructType</div><div class="ttdoc">LLVM types. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00106">BasicTypes.h:106</a></div></div>
|
|
113
115
|
<div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
|
|
114
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aa568dc82decd28d2ef40785a4a647602"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">SVF::ObjTypeInfo::isStack</a></div><div class="ttdeci">bool isStack()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
115
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a616e9f4d6f82a253f94391c47668b9a6"><div class="ttname"><a href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">SVF::MemObj::isVarArray</a></div><div class="ttdeci">bool isVarArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
116
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aa568dc82decd28d2ef40785a4a647602"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aa568dc82decd28d2ef40785a4a647602">SVF::ObjTypeInfo::isStack</a></div><div class="ttdeci">bool isStack()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00694">SymbolTableInfo.h:694</a></div></div>
|
|
117
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a616e9f4d6f82a253f94391c47668b9a6"><div class="ttname"><a href="classSVF_1_1MemObj.html#a616e9f4d6f82a253f94391c47668b9a6">SVF::MemObj::isVarArray</a></div><div class="ttdeci">bool isVarArray() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00770">SymbolTableInfo.cpp:770</a></div></div>
|
|
116
118
|
<div class="ttc" id="namespaceSVF_html_ad11fe2412b2182365a662ff0e4639b48"><div class="ttname"><a href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SVF::SymID</a></div><div class="ttdeci">unsigned SymID</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00082">SVFBasicTypes.h:82</a></div></div>
|
|
117
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a706cdc47e78732853252d5a4af85653a"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">SVF::ObjTypeInfo::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get LLVM type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
118
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a51be7ad70bc2c6a4230bd2f6b86bdc88"><div class="ttname"><a href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">SVF::MemObj::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit() const</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
119
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a706cdc47e78732853252d5a4af85653a"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a706cdc47e78732853252d5a4af85653a">SVF::ObjTypeInfo::getType</a></div><div class="ttdeci">const Type * getType() const</div><div class="ttdoc">Get LLVM type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00651">SymbolTableInfo.h:651</a></div></div>
|
|
120
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a51be7ad70bc2c6a4230bd2f6b86bdc88"><div class="ttname"><a href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">SVF::MemObj::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit() const</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00713">SymbolTableInfo.cpp:713</a></div></div>
|
|
119
121
|
<div class="ttc" id="namespaceSVF_1_1cppUtil_html_aeef0f5c6486379043a7d47b0635f2667"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">SVF::cppUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00123">CPPUtil.cpp:123</a></div></div>
|
|
120
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a8e6c60978df9828c1dcb54086e83edc1"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a8e6c60978df9828c1dcb54086e83edc1">SVF::ObjTypeInfo::isConstDataOrConstGlobal</a></div><div class="ttdeci">bool isConstDataOrConstGlobal()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
121
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_ad6926becf26a625cfe165aec120b2a1e"><div class="ttname"><a href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">SVF::MemObj::isNonPtrFieldObj</a></div><div class="ttdeci">bool isNonPtrFieldObj(const LocationSet &ls) const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
122
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a8e6c60978df9828c1dcb54086e83edc1"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a8e6c60978df9828c1dcb54086e83edc1">SVF::ObjTypeInfo::isConstDataOrConstGlobal</a></div><div class="ttdeci">bool isConstDataOrConstGlobal()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00731">SymbolTableInfo.h:731</a></div></div>
|
|
123
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_ad6926becf26a625cfe165aec120b2a1e"><div class="ttname"><a href="classSVF_1_1MemObj.html#ad6926becf26a625cfe165aec120b2a1e">SVF::MemObj::isNonPtrFieldObj</a></div><div class="ttdeci">bool isNonPtrFieldObj(const LocationSet &ls) const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00800">SymbolTableInfo.cpp:800</a></div></div>
|
|
122
124
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a7486fd8e5350879ed1cbd835c0d4e191"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVF::SVFUtil::value2String</a></div><div class="ttdeci">const std::string value2String(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00390">SVFUtil.cpp:390</a></div></div>
|
|
123
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a40d6703875b370aed2c6dc41c0594af5"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">SVF::ObjTypeInfo::isVarStruct</a></div><div class="ttdeci">bool isVarStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
125
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a40d6703875b370aed2c6dc41c0594af5"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a40d6703875b370aed2c6dc41c0594af5">SVF::ObjTypeInfo::isVarStruct</a></div><div class="ttdeci">bool isVarStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00707">SymbolTableInfo.h:707</a></div></div>
|
|
124
126
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
125
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a1e6ff4c2b04b07c5f71e5e7a6a0d7735"><div class="ttname"><a href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">SVF::MemObj::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Clean up memory. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
126
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_ad1966c52f95775ac7d65c0ba6632c3cf"><div class="ttname"><a href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">SVF::MemObj::isVarStruct</a></div><div class="ttdeci">bool isVarStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
127
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a1e6ff4c2b04b07c5f71e5e7a6a0d7735"><div class="ttname"><a href="classSVF_1_1MemObj.html#a1e6ff4c2b04b07c5f71e5e7a6a0d7735">SVF::MemObj::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Clean up memory. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00706">SymbolTableInfo.cpp:706</a></div></div>
|
|
128
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_ad1966c52f95775ac7d65c0ba6632c3cf"><div class="ttname"><a href="classSVF_1_1MemObj.html#ad1966c52f95775ac7d65c0ba6632c3cf">SVF::MemObj::isVarStruct</a></div><div class="ttdeci">bool isVarStruct() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00765">SymbolTableInfo.cpp:765</a></div></div>
|
|
127
129
|
<div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00123">BasicTypes.h:123</a></div></div>
|
|
128
130
|
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
129
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac5bae1e7917f415193a805e8d2e29320"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">SVF::ObjTypeInfo::hasPtrObj</a></div><div class="ttdeci">bool hasPtrObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
130
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a898c5bb3956402578266a6fb142e02b1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">SVF::MemObj::isHeap</a></div><div class="ttdeci">bool isHeap() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
131
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_ac5bae1e7917f415193a805e8d2e29320"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#ac5bae1e7917f415193a805e8d2e29320">SVF::ObjTypeInfo::hasPtrObj</a></div><div class="ttdeci">bool hasPtrObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00739">SymbolTableInfo.h:739</a></div></div>
|
|
132
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a898c5bb3956402578266a6fb142e02b1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">SVF::MemObj::isHeap</a></div><div class="ttdeci">bool isHeap() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00750">SymbolTableInfo.cpp:750</a></div></div>
|
|
131
133
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_afd2cf6ef6d7f2a583c709a72067be89b"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#afd2cf6ef6d7f2a583c709a72067be89b">SVF::SymbolTableInfo::SYMTYPE</a></div><div class="ttdeci">SYMTYPE</div><div class="ttdoc">Symbol types. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00054">SymbolTableInfo.h:54</a></div></div>
|
|
132
|
-
<div class="ttc" id="classSVF_1_1StInfo_html_a5e46da2adce317d2cf58640d06d6b349"><div class="ttname"><a href="classSVF_1_1StInfo.html#a5e46da2adce317d2cf58640d06d6b349">SVF::StInfo::addFldWithType</a></div><div class="ttdeci">void addFldWithType(u32_t fldIdx, const Type *type, u32_t fullOffset)</div><div class="ttdoc">Add field (index and offset) with its corresponding type. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00585">SymbolTableInfo.h:585</a></div></div>
|
|
133
134
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a9e85d445e8b7b205134acd3874bba388"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">SVF::SVFUtil::isConstantData</a></div><div class="ttdeci">bool isConstantData(const Value *val)</div><div class="ttdoc">Return true if the value refers to constant data, e.g., i32 0. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00392">LLVMUtil.h:392</a></div></div>
|
|
134
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
135
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00719">SymbolTableInfo.cpp:719</a></div></div>
|
|
135
136
|
<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>
|
|
136
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a3ab6f65ffbf6442daac4d3f70f2d3cb1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">SVF::MemObj::getId</a></div><div class="ttdeci">SymID getId() const</div><div class="ttdoc">Get the memory object id. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
137
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a3a58b1e0192b92dac5bbfad24adbcdac"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">SVF::ObjTypeInfo::isNonPtrFieldObj</a></div><div class="ttdeci">virtual bool isNonPtrFieldObj(const LocationSet &ls)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
137
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a3ab6f65ffbf6442daac4d3f70f2d3cb1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">SVF::MemObj::getId</a></div><div class="ttdeci">SymID getId() const</div><div class="ttdoc">Get the memory object id. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00445">SymbolTableInfo.h:445</a></div></div>
|
|
138
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a3a58b1e0192b92dac5bbfad24adbcdac"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a3a58b1e0192b92dac5bbfad24adbcdac">SVF::ObjTypeInfo::isNonPtrFieldObj</a></div><div class="ttdeci">virtual bool isNonPtrFieldObj(const LocationSet &ls)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00608">SymbolTableInfo.cpp:608</a></div></div>
|
|
138
139
|
<div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00072">LocationSet.h:72</a></div></div>
|
|
139
140
|
<div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
|
|
140
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
141
|
-
<div class="ttc" id="classSVF_1_1StInfo_html_ab5908115f11eccee61bd0759a51d5af0"><div class="ttname"><a href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">SVF::StInfo::getFlattenedFieldInfoVec</a></div><div class="ttdeci">std::vector< FlattenedFieldInfo > & getFlattenedFieldInfoVec()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
142
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_aa50d7c3b4e7ac0aa769bc094bea26e16"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16">SVF::MemObj::isConstantData</a></div><div class="ttdeci">bool isConstantData() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
141
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00439">SymbolTableInfo.h:439</a></div></div>
|
|
142
|
+
<div class="ttc" id="classSVF_1_1StInfo_html_ab5908115f11eccee61bd0759a51d5af0"><div class="ttname"><a href="classSVF_1_1StInfo.html#ab5908115f11eccee61bd0759a51d5af0">SVF::StInfo::getFlattenedFieldInfoVec</a></div><div class="ttdeci">std::vector< FlattenedFieldInfo > & getFlattenedFieldInfoVec()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00563">SymbolTableInfo.h:563</a></div></div>
|
|
143
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_aa50d7c3b4e7ac0aa769bc094bea26e16"><div class="ttname"><a href="classSVF_1_1MemObj.html#aa50d7c3b4e7ac0aa769bc094bea26e16">SVF::MemObj::isConstantData</a></div><div class="ttdeci">bool isConstantData() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00790">SymbolTableInfo.cpp:790</a></div></div>
|
|
144
|
+
<div class="ttc" id="classSVF_1_1StInfo_html_a1a07c2b1415c29d7d70791c6dfe602a3"><div class="ttname"><a href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">SVF::StInfo::setNumOfFieldsAndElems</a></div><div class="ttdeci">void setNumOfFieldsAndElems(u32_t nf, u32_t ne)</div><div class="ttdoc">Set number of fields and elements of an aggrate. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00573">SymbolTableInfo.h:573</a></div></div>
|
|
143
145
|
<div class="ttc" id="namespaceSVF_html_a03db82b8a7914367024723dba4d6ca3c"><div class="ttname"><a href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">SVF::DataLayout</a></div><div class="ttdeci">llvm::DataLayout DataLayout</div><div class="ttdoc">LLVM data layout. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00115">BasicTypes.h:115</a></div></div>
|
|
144
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html">SVF::ObjTypeInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
146
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html">SVF::ObjTypeInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00597">SymbolTableInfo.h:597</a></div></div>
|
|
145
147
|
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
146
|
-
<div class="ttc" id="classSVF_1_1StInfo_html"><div class="ttname"><a href="classSVF_1_1StInfo.html">SVF::StInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
147
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a6f6c80f7d067a6082a9af04d2547cf34"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a6f6c80f7d067a6082a9af04d2547cf34">SVF::ObjTypeInfo::isConstantData</a></div><div class="ttdeci">bool isConstantData()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
148
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a66692043a56c327ac7ac00cc3126cd78"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78">SVF::ObjTypeInfo::analyzeHeapObjType</a></div><div class="ttdeci">void analyzeHeapObjType(const Type *type)</div><div class="ttdoc">Analyse types of heap and static objects. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
148
|
+
<div class="ttc" id="classSVF_1_1StInfo_html"><div class="ttname"><a href="classSVF_1_1StInfo.html">SVF::StInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00503">SymbolTableInfo.h:503</a></div></div>
|
|
149
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a6f6c80f7d067a6082a9af04d2547cf34"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a6f6c80f7d067a6082a9af04d2547cf34">SVF::ObjTypeInfo::isConstantData</a></div><div class="ttdeci">bool isConstantData()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00735">SymbolTableInfo.h:735</a></div></div>
|
|
150
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a66692043a56c327ac7ac00cc3126cd78"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a66692043a56c327ac7ac00cc3126cd78">SVF::ObjTypeInfo::analyzeHeapObjType</a></div><div class="ttdeci">void analyzeHeapObjType(const Type *type)</div><div class="ttdoc">Analyse types of heap and static objects. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00586">SymbolTableInfo.cpp:586</a></div></div>
|
|
149
151
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a973113323e30a01fd904b35ac18d40ce"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a973113323e30a01fd904b35ac18d40ce">SVF::SVFUtil::getTypeOfHeapAlloc</a></div><div class="ttdeci">const Type * getTypeOfHeapAlloc(const llvm::Instruction *inst)</div><div class="ttdoc">Get the type of the heap allocation. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00269">LLVMUtil.cpp:269</a></div></div>
|
|
150
152
|
<div class="ttc" id="namespaceSVF_html_a366625858f450a1ea5f985a3c83e0f14"><div class="ttname"><a href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">SVF::u64_t</a></div><div class="ttdeci">unsigned long long u64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00077">SVFBasicTypes.h:77</a></div></div>
|
|
151
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aa2855b69150287e5f04a7a683dc4c91f"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">SVF::ObjTypeInfo::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
152
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a1a4ff4aaaf2573240a318e1b79328cd0"><div class="ttname"><a href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">SVF::MemObj::isConstDataOrConstGlobal</a></div><div class="ttdeci">bool isConstDataOrConstGlobal() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
153
|
-
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a06493939f797f122b70b90bbf22cad7a"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">SVF::ObjTypeInfo::isStruct</a></div><div class="ttdeci">bool isStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
153
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_aa2855b69150287e5f04a7a683dc4c91f"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aa2855b69150287e5f04a7a683dc4c91f">SVF::ObjTypeInfo::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00686">SymbolTableInfo.h:686</a></div></div>
|
|
154
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a1a4ff4aaaf2573240a318e1b79328cd0"><div class="ttname"><a href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">SVF::MemObj::isConstDataOrConstGlobal</a></div><div class="ttdeci">bool isConstDataOrConstGlobal() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00785">SymbolTableInfo.cpp:785</a></div></div>
|
|
155
|
+
<div class="ttc" id="classSVF_1_1ObjTypeInfo_html_a06493939f797f122b70b90bbf22cad7a"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#a06493939f797f122b70b90bbf22cad7a">SVF::ObjTypeInfo::isStruct</a></div><div class="ttdeci">bool isStruct()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00715">SymbolTableInfo.h:715</a></div></div>
|
|
154
156
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html">SVF::SymbolTableInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00047">SymbolTableInfo.h:47</a></div></div>
|
|
155
157
|
<div class="ttc" id="namespaceSVF_html_aedf0d6718ca176e0b9e17ab4b30729c6"><div class="ttname"><a href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">SVF::OrderedMap</a></div><div class="ttdeci">std::map< Key, Value, Compare, Allocator > OrderedMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00107">SVFBasicTypes.h:107</a></div></div>
|
|
156
158
|
</div><!-- fragment --></div><!-- contents -->
|