svf-tools 1.0.744 → 1.0.746
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/CFLAlias_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +111 -110
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1124 -1053
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +42 -38
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +228 -225
- package/SVF-doxygen/html/html/Options_8h_source.html +46 -44
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +501 -499
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +17 -17
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +108 -107
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +59 -57
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1165 -1035
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +89 -88
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +43 -17
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +480 -478
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +4 -4
- package/SVF-doxygen/html/html/functions_c.html +20 -17
- package/SVF-doxygen/html/html/functions_e.html +5 -2
- package/SVF-doxygen/html/html/functions_func_c.html +14 -11
- package/SVF-doxygen/html/html/functions_func_l.html +4 -1
- package/SVF-doxygen/html/html/functions_l.html +3 -0
- package/SVF-doxygen/html/html/functions_n.html +4 -4
- package/SVF-doxygen/html/html/functions_o.html +13 -13
- package/SVF-doxygen/html/html/functions_p.html +15 -17
- package/SVF-doxygen/html/html/functions_r.html +2 -2
- package/SVF-doxygen/html/html/functions_s.html +12 -12
- package/SVF-doxygen/html/html/functions_v.html +6 -6
- package/SVF-doxygen/html/html/functions_vars_e.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +9 -9
- package/SVF-doxygen/html/html/search/all_10.js +323 -323
- package/SVF-doxygen/html/html/search/all_11.js +208 -208
- package/SVF-doxygen/html/html/search/all_12.js +546 -546
- package/SVF-doxygen/html/html/search/all_13.js +189 -189
- package/SVF-doxygen/html/html/search/all_14.js +66 -66
- package/SVF-doxygen/html/html/search/all_15.js +170 -170
- package/SVF-doxygen/html/html/search/all_16.js +60 -60
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_18.js +1 -1
- package/SVF-doxygen/html/html/search/all_19.js +10 -10
- package/SVF-doxygen/html/html/search/all_1a.js +169 -169
- package/SVF-doxygen/html/html/search/all_3.js +100 -99
- package/SVF-doxygen/html/html/search/all_4.js +228 -228
- package/SVF-doxygen/html/html/search/all_5.js +156 -155
- package/SVF-doxygen/html/html/search/all_6.js +221 -221
- package/SVF-doxygen/html/html/search/all_7.js +1012 -1012
- package/SVF-doxygen/html/html/search/all_8.js +192 -192
- package/SVF-doxygen/html/html/search/all_9.js +597 -597
- package/SVF-doxygen/html/html/search/all_a.js +47 -47
- package/SVF-doxygen/html/html/search/all_b.js +26 -26
- package/SVF-doxygen/html/html/search/all_c.js +113 -112
- package/SVF-doxygen/html/html/search/all_d.js +196 -196
- package/SVF-doxygen/html/html/search/all_e.js +206 -206
- package/SVF-doxygen/html/html/search/all_f.js +122 -122
- package/SVF-doxygen/html/html/search/classes_0.js +26 -26
- package/SVF-doxygen/html/html/search/classes_1.js +9 -9
- package/SVF-doxygen/html/html/search/classes_10.js +73 -73
- package/SVF-doxygen/html/html/search/classes_11.js +15 -15
- package/SVF-doxygen/html/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/html/search/classes_13.js +10 -10
- package/SVF-doxygen/html/html/search/classes_14.js +14 -14
- package/SVF-doxygen/html/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/html/search/classes_2.js +76 -76
- package/SVF-doxygen/html/html/search/classes_3.js +35 -35
- package/SVF-doxygen/html/html/search/classes_4.js +10 -10
- package/SVF-doxygen/html/html/search/classes_5.js +27 -27
- package/SVF-doxygen/html/html/search/classes_6.js +98 -98
- package/SVF-doxygen/html/html/search/classes_7.js +33 -33
- package/SVF-doxygen/html/html/search/classes_8.js +56 -56
- package/SVF-doxygen/html/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/html/search/classes_a.js +12 -12
- package/SVF-doxygen/html/html/search/classes_b.js +29 -29
- package/SVF-doxygen/html/html/search/classes_c.js +6 -6
- package/SVF-doxygen/html/html/search/classes_d.js +19 -19
- package/SVF-doxygen/html/html/search/classes_e.js +35 -35
- package/SVF-doxygen/html/html/search/classes_f.js +25 -25
- package/SVF-doxygen/html/html/search/defines_0.js +3 -3
- package/SVF-doxygen/html/html/search/defines_1.js +2 -2
- package/SVF-doxygen/html/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/html/search/defines_3.js +20 -20
- package/SVF-doxygen/html/html/search/defines_4.js +3 -3
- package/SVF-doxygen/html/html/search/defines_5.js +4 -4
- package/SVF-doxygen/html/html/search/defines_6.js +2 -2
- package/SVF-doxygen/html/html/search/defines_7.js +5 -5
- package/SVF-doxygen/html/html/search/defines_8.js +13 -13
- package/SVF-doxygen/html/html/search/defines_9.js +9 -9
- package/SVF-doxygen/html/html/search/defines_a.js +2 -2
- package/SVF-doxygen/html/html/search/defines_b.js +2 -2
- package/SVF-doxygen/html/html/search/defines_c.js +2 -2
- package/SVF-doxygen/html/html/search/defines_d.js +6 -6
- package/SVF-doxygen/html/html/search/defines_e.js +3 -3
- package/SVF-doxygen/html/html/search/enums_0.js +3 -3
- package/SVF-doxygen/html/html/search/enums_1.js +1 -1
- package/SVF-doxygen/html/html/search/enums_10.js +1 -1
- package/SVF-doxygen/html/html/search/enums_11.js +1 -1
- package/SVF-doxygen/html/html/search/enums_2.js +8 -8
- package/SVF-doxygen/html/html/search/enums_3.js +1 -1
- package/SVF-doxygen/html/html/search/enums_4.js +4 -4
- package/SVF-doxygen/html/html/search/enums_5.js +1 -1
- package/SVF-doxygen/html/html/search/enums_6.js +2 -2
- package/SVF-doxygen/html/html/search/enums_7.js +2 -2
- package/SVF-doxygen/html/html/search/enums_8.js +4 -4
- package/SVF-doxygen/html/html/search/enums_9.js +1 -1
- package/SVF-doxygen/html/html/search/enums_a.js +2 -2
- package/SVF-doxygen/html/html/search/enums_b.js +7 -7
- package/SVF-doxygen/html/html/search/enums_c.js +1 -1
- package/SVF-doxygen/html/html/search/enums_d.js +4 -4
- package/SVF-doxygen/html/html/search/enums_e.js +2 -2
- package/SVF-doxygen/html/html/search/enums_f.js +4 -4
- package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
- package/SVF-doxygen/html/html/search/enumvalues_1.js +13 -13
- package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
- package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
- package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
- package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
- package/SVF-doxygen/html/html/search/enumvalues_2.js +40 -40
- package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
- package/SVF-doxygen/html/html/search/enumvalues_4.js +34 -34
- package/SVF-doxygen/html/html/search/enumvalues_5.js +47 -47
- package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
- package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
- package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/html/search/enumvalues_a.js +17 -17
- package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
- package/SVF-doxygen/html/html/search/enumvalues_c.js +6 -6
- package/SVF-doxygen/html/html/search/enumvalues_d.js +16 -16
- package/SVF-doxygen/html/html/search/enumvalues_e.js +11 -11
- package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
- package/SVF-doxygen/html/html/search/files_0.js +13 -13
- package/SVF-doxygen/html/html/search/files_1.js +7 -7
- package/SVF-doxygen/html/html/search/files_10.js +8 -8
- package/SVF-doxygen/html/html/search/files_11.js +8 -8
- package/SVF-doxygen/html/html/search/files_12.js +2 -2
- package/SVF-doxygen/html/html/search/files_2.js +50 -50
- package/SVF-doxygen/html/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/html/search/files_4.js +4 -4
- package/SVF-doxygen/html/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/html/search/files_6.js +9 -9
- package/SVF-doxygen/html/html/search/files_7.js +14 -14
- package/SVF-doxygen/html/html/search/files_8.js +13 -13
- package/SVF-doxygen/html/html/search/files_9.js +18 -18
- package/SVF-doxygen/html/html/search/files_a.js +3 -3
- package/SVF-doxygen/html/html/search/files_b.js +2 -2
- package/SVF-doxygen/html/html/search/files_c.js +19 -19
- package/SVF-doxygen/html/html/search/files_d.js +4 -4
- package/SVF-doxygen/html/html/search/files_e.js +62 -62
- package/SVF-doxygen/html/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/html/search/functions_0.js +351 -351
- package/SVF-doxygen/html/html/search/functions_1.js +80 -80
- package/SVF-doxygen/html/html/search/functions_10.js +121 -121
- package/SVF-doxygen/html/html/search/functions_11.js +282 -282
- package/SVF-doxygen/html/html/search/functions_12.js +55 -55
- package/SVF-doxygen/html/html/search/functions_13.js +38 -38
- package/SVF-doxygen/html/html/search/functions_14.js +71 -71
- package/SVF-doxygen/html/html/search/functions_15.js +29 -29
- package/SVF-doxygen/html/html/search/functions_16.js +2 -2
- package/SVF-doxygen/html/html/search/functions_17.js +169 -169
- package/SVF-doxygen/html/html/search/functions_2.js +251 -250
- package/SVF-doxygen/html/html/search/functions_3.js +72 -72
- package/SVF-doxygen/html/html/search/functions_4.js +55 -55
- package/SVF-doxygen/html/html/search/functions_5.js +54 -54
- package/SVF-doxygen/html/html/search/functions_6.js +832 -832
- package/SVF-doxygen/html/html/search/functions_7.js +144 -144
- package/SVF-doxygen/html/html/search/functions_8.js +417 -417
- package/SVF-doxygen/html/html/search/functions_9.js +29 -29
- package/SVF-doxygen/html/html/search/functions_a.js +2 -2
- package/SVF-doxygen/html/html/search/functions_b.js +23 -22
- package/SVF-doxygen/html/html/search/functions_c.js +75 -75
- package/SVF-doxygen/html/html/search/functions_d.js +35 -35
- package/SVF-doxygen/html/html/search/functions_e.js +56 -56
- package/SVF-doxygen/html/html/search/functions_f.js +142 -142
- package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
- package/SVF-doxygen/html/html/search/related_0.js +2 -2
- package/SVF-doxygen/html/html/search/related_1.js +1 -1
- package/SVF-doxygen/html/html/search/related_2.js +2 -2
- package/SVF-doxygen/html/html/search/related_3.js +2 -2
- package/SVF-doxygen/html/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/html/search/related_5.js +1 -1
- package/SVF-doxygen/html/html/search/related_6.js +2 -2
- package/SVF-doxygen/html/html/search/related_7.js +4 -4
- package/SVF-doxygen/html/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/html/search/related_c.js +1 -1
- package/SVF-doxygen/html/html/search/related_d.js +11 -11
- package/SVF-doxygen/html/html/search/related_e.js +2 -2
- package/SVF-doxygen/html/html/search/related_f.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
- package/SVF-doxygen/html/html/search/typedefs_1.js +25 -25
- package/SVF-doxygen/html/html/search/typedefs_10.js +60 -60
- package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
- package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
- package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
- package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
- package/SVF-doxygen/html/html/search/typedefs_2.js +126 -126
- package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
- package/SVF-doxygen/html/html/search/typedefs_4.js +16 -16
- package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
- package/SVF-doxygen/html/html/search/typedefs_6.js +52 -52
- package/SVF-doxygen/html/html/search/typedefs_7.js +40 -40
- package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
- package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
- package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
- package/SVF-doxygen/html/html/search/typedefs_c.js +40 -40
- package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
- package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
- package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
- package/SVF-doxygen/html/html/search/variables_0.js +146 -146
- package/SVF-doxygen/html/html/search/variables_1.js +74 -74
- package/SVF-doxygen/html/html/search/variables_10.js +97 -97
- package/SVF-doxygen/html/html/search/variables_11.js +46 -46
- package/SVF-doxygen/html/html/search/variables_12.js +93 -93
- package/SVF-doxygen/html/html/search/variables_13.js +77 -77
- package/SVF-doxygen/html/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/html/search/variables_15.js +48 -48
- package/SVF-doxygen/html/html/search/variables_16.js +9 -9
- package/SVF-doxygen/html/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/html/search/variables_18.js +2 -2
- package/SVF-doxygen/html/html/search/variables_2.js +35 -35
- package/SVF-doxygen/html/html/search/variables_3.js +148 -148
- package/SVF-doxygen/html/html/search/variables_4.js +56 -56
- package/SVF-doxygen/html/html/search/variables_5.js +40 -39
- package/SVF-doxygen/html/html/search/variables_6.js +67 -67
- package/SVF-doxygen/html/html/search/variables_7.js +33 -33
- package/SVF-doxygen/html/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/html/search/variables_9.js +77 -77
- package/SVF-doxygen/html/html/search/variables_a.js +4 -4
- package/SVF-doxygen/html/html/search/variables_b.js +10 -10
- package/SVF-doxygen/html/html/search/variables_c.js +45 -45
- package/SVF-doxygen/html/html/search/variables_d.js +56 -56
- package/SVF-doxygen/html/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/html/search/variables_f.js +33 -33
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/svf_2include_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/package.json +1 -1
- package/svf/include/Util/Options.h +1 -0
- package/svf/lib/Util/Options.cpp +4 -2
- package/svf-llvm/include/SVF-LLVM/LLVMModule.h +3 -1
- package/svf-llvm/lib/LLVMLoopAnalysis.cpp +1 -0
- package/svf-llvm/lib/LLVMModule.cpp +146 -72
- package/svf-llvm/lib/SVFIRBuilder.cpp +1 -0
|
@@ -847,509 +847,510 @@ $(function() {
|
|
|
847
847
|
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  </div>
|
|
848
848
|
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">LLVMUtil::getCallee</a>(cs))</div>
|
|
849
849
|
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  {</div>
|
|
850
|
-
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> 
|
|
851
|
-
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="
|
|
852
|
-
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> 
|
|
853
|
-
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> 
|
|
854
|
-
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> 
|
|
855
|
-
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> 
|
|
856
|
-
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> 
|
|
857
|
-
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> 
|
|
858
|
-
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> 
|
|
859
|
-
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> 
|
|
860
|
-
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> 
|
|
861
|
-
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> 
|
|
862
|
-
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> 
|
|
863
|
-
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> 
|
|
864
|
-
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> 
|
|
865
|
-
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> 
|
|
866
|
-
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> 
|
|
867
|
-
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> }</div>
|
|
868
|
-
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> 
|
|
869
|
-
<div class="line"><a name="
|
|
870
|
-
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> 
|
|
871
|
-
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> 
|
|
872
|
-
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> 
|
|
873
|
-
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> 
|
|
874
|
-
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> 
|
|
875
|
-
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> 
|
|
876
|
-
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  </div>
|
|
877
|
-
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> 
|
|
878
|
-
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> 
|
|
879
|
-
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> 
|
|
880
|
-
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  </div>
|
|
881
|
-
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> 
|
|
882
|
-
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
883
|
-
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <
|
|
884
|
-
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="keyword">const</span> <a class="code" href="
|
|
885
|
-
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="
|
|
886
|
-
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> 
|
|
887
|
-
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> 
|
|
888
|
-
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> }</div>
|
|
889
|
-
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> 
|
|
850
|
+
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(callee);</div>
|
|
851
|
+
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(callee);</div>
|
|
852
|
+
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfcallee))</div>
|
|
853
|
+
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  {</div>
|
|
854
|
+
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="comment">// There is no extpag for the function, use the old method.</span></div>
|
|
855
|
+
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  preProcessExtCall(cs);</div>
|
|
856
|
+
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  handleExtCall(svfcall, svfcallee);</div>
|
|
857
|
+
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  }</div>
|
|
858
|
+
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">else</span></div>
|
|
859
|
+
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  {</div>
|
|
860
|
+
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  handleDirectCall(cs, callee);</div>
|
|
861
|
+
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  }</div>
|
|
862
|
+
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div>
|
|
863
|
+
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">else</span></div>
|
|
864
|
+
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  {</div>
|
|
865
|
+
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div>
|
|
866
|
+
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  handleIndCall(cs);</div>
|
|
867
|
+
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  }</div>
|
|
868
|
+
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> }</div>
|
|
869
|
+
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  </div>
|
|
870
|
+
<div class="line"><a name="l00869"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aca31431b70e2fb360caa1140e29c0c9d"> 869</a></span> <span class="keywordtype">void</span> SVFIRBuilder::visitReturnInst(<a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a> &inst)</div>
|
|
871
|
+
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> {</div>
|
|
872
|
+
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  </div>
|
|
873
|
+
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="comment">// ReturnInst itself should always not be a pointer type</span></div>
|
|
874
|
+
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  assert(!SVFUtil::isa<PointerType>(inst.getType()));</div>
|
|
875
|
+
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  </div>
|
|
876
|
+
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process return "</span> << LLVMModuleSet::getLLVMModuleSet()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
877
|
+
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  </div>
|
|
878
|
+
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = inst.getReturnValue())</div>
|
|
879
|
+
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  {</div>
|
|
880
|
+
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(inst.getParent()->getParent());</div>
|
|
881
|
+
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  </div>
|
|
882
|
+
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = getReturnNode(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
|
|
883
|
+
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = getValueNode(src);</div>
|
|
884
|
+
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(&inst);</div>
|
|
885
|
+
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag->getICFG()->getICFGNode(svfInst);</div>
|
|
886
|
+
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="comment">//vnS may be null if src is a null ptr</span></div>
|
|
887
|
+
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  addPhiStmt(rnF,vnS,icfgNode);</div>
|
|
888
|
+
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  }</div>
|
|
889
|
+
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> }</div>
|
|
890
890
|
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  </div>
|
|
891
|
-
<div class="line"><a name="
|
|
892
|
-
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> 
|
|
893
|
-
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> 
|
|
894
|
-
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> 
|
|
895
|
-
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> 
|
|
896
|
-
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> 
|
|
897
|
-
<div class="line"><a name="
|
|
898
|
-
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> 
|
|
899
|
-
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> 
|
|
900
|
-
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> 
|
|
901
|
-
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> 
|
|
902
|
-
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> 
|
|
903
|
-
<div class="line"><a name="
|
|
904
|
-
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> 
|
|
905
|
-
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> 
|
|
906
|
-
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
907
|
-
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <
|
|
908
|
-
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> 
|
|
909
|
-
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> 
|
|
910
|
-
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> 
|
|
911
|
-
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> 
|
|
912
|
-
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> 
|
|
913
|
-
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> 
|
|
914
|
-
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> 
|
|
915
|
-
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <
|
|
916
|
-
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> 
|
|
917
|
-
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> 
|
|
918
|
-
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keyword">const</span> <a class="code" href="
|
|
919
|
-
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keyword">const</span> <a class="code" href="
|
|
920
|
-
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> 
|
|
921
|
-
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> 
|
|
922
|
-
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> 
|
|
923
|
-
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> 
|
|
924
|
-
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> 
|
|
925
|
-
<div class="line"><a name="l00944"></a><span class="lineno"
|
|
926
|
-
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> 
|
|
927
|
-
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> 
|
|
928
|
-
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
929
|
-
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  </div>
|
|
930
|
-
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> 
|
|
931
|
-
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <
|
|
932
|
-
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> 
|
|
933
|
-
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> 
|
|
934
|
-
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#
|
|
935
|
-
<div class="line"><a name="
|
|
936
|
-
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <
|
|
937
|
-
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> 
|
|
938
|
-
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> 
|
|
939
|
-
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  <span class="keyword">const</span> <a class="code" href="
|
|
940
|
-
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> 
|
|
941
|
-
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> 
|
|
942
|
-
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> 
|
|
943
|
-
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> 
|
|
944
|
-
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> 
|
|
945
|
-
<div class="line"><a name="
|
|
946
|
-
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> 
|
|
947
|
-
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> 
|
|
948
|
-
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <a class="code" href="namespaceSVF.html#
|
|
949
|
-
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  <a class="code" href="namespaceSVF.html#
|
|
950
|
-
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> 
|
|
951
|
-
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> 
|
|
952
|
-
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> 
|
|
953
|
-
<div class="line"><a name="
|
|
954
|
-
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> 
|
|
955
|
-
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> 
|
|
956
|
-
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <
|
|
957
|
-
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> 
|
|
958
|
-
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> 
|
|
959
|
-
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <a class="code" href="namespaceSVF.html#
|
|
960
|
-
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> 
|
|
961
|
-
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> 
|
|
962
|
-
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> }</div>
|
|
963
|
-
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> 
|
|
891
|
+
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  </div>
|
|
892
|
+
<div class="line"><a name="l00899"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7a17ca95a5435b498fc875eb9a290800"> 899</a></span> <span class="keywordtype">void</span> SVFIRBuilder::visitExtractValueInst(<a class="code" href="namespaceSVF.html#ace1fd4c32134018e2f6d5da193524986">ExtractValueInst</a> &inst)</div>
|
|
893
|
+
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> {</div>
|
|
894
|
+
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&inst);</div>
|
|
895
|
+
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  addBlackHoleAddrEdge(dst);</div>
|
|
896
|
+
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> }</div>
|
|
897
|
+
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  </div>
|
|
898
|
+
<div class="line"><a name="l00913"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac6b24fcbd1e1b31141c27167d49a56ec"> 913</a></span> <span class="keywordtype">void</span> SVFIRBuilder::visitExtractElementInst(<a class="code" href="namespaceSVF.html#afb88c4d723dd7c51bdfc7ba5893cb356">ExtractElementInst</a> &inst)</div>
|
|
899
|
+
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> {</div>
|
|
900
|
+
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&inst);</div>
|
|
901
|
+
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  addBlackHoleAddrEdge(dst);</div>
|
|
902
|
+
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> }</div>
|
|
903
|
+
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  </div>
|
|
904
|
+
<div class="line"><a name="l00923"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4ad832691784cf4cb93017792ea3d9af"> 923</a></span> <span class="keywordtype">void</span> SVFIRBuilder::visitBranchInst(<a class="code" href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">BranchInst</a> &inst)</div>
|
|
905
|
+
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> {</div>
|
|
906
|
+
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&inst);</div>
|
|
907
|
+
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div>
|
|
908
|
+
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  <span class="keywordflow">if</span> (inst.isConditional())</div>
|
|
909
|
+
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  cond = getValueNode(inst.getCondition());</div>
|
|
910
|
+
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <span class="keywordflow">else</span></div>
|
|
911
|
+
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  cond = pag->getNullPtr();</div>
|
|
912
|
+
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  </div>
|
|
913
|
+
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  assert(inst.getNumSuccessors() <= 2 && <span class="stringliteral">"if/else has more than two branches?"</span>);</div>
|
|
914
|
+
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  </div>
|
|
915
|
+
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
|
|
916
|
+
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < inst.getNumSuccessors(); ++i)</div>
|
|
917
|
+
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  {</div>
|
|
918
|
+
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &inst.getSuccessor(i)->front();</div>
|
|
919
|
+
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(succInst);</div>
|
|
920
|
+
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag->getICFG()->getICFGNode(svfSuccInst);</div>
|
|
921
|
+
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  successors.push_back(std::make_pair(icfgNode, 1-i));</div>
|
|
922
|
+
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  }</div>
|
|
923
|
+
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  addBranchStmt(brinst, cond,successors);</div>
|
|
924
|
+
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> }</div>
|
|
925
|
+
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  </div>
|
|
926
|
+
<div class="line"><a name="l00945"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a83bc9c1dbc95156a68f139ff16faca2a"> 945</a></span> <span class="keywordtype">void</span> SVFIRBuilder::visitSwitchInst(<a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a> &inst)</div>
|
|
927
|
+
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> {</div>
|
|
928
|
+
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&inst);</div>
|
|
929
|
+
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
|
|
930
|
+
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  </div>
|
|
931
|
+
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
|
|
932
|
+
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < inst.getNumSuccessors(); ++i)</div>
|
|
933
|
+
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  {</div>
|
|
934
|
+
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &inst.getSuccessor(i)->front();</div>
|
|
935
|
+
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* condVal = inst.findCaseDest(inst.getSuccessor(i));</div>
|
|
936
|
+
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val = -1;</div>
|
|
937
|
+
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <span class="keywordflow">if</span> (condVal && condVal->getBitWidth() <= 64)</div>
|
|
938
|
+
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  val = condVal->getSExtValue();</div>
|
|
939
|
+
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(succInst);</div>
|
|
940
|
+
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag->getICFG()->getICFGNode(svfSuccInst);</div>
|
|
941
|
+
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  successors.push_back(std::make_pair(icfgNode,val));</div>
|
|
942
|
+
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  }</div>
|
|
943
|
+
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  addBranchStmt(brinst, cond,successors);</div>
|
|
944
|
+
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> }</div>
|
|
945
|
+
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  </div>
|
|
946
|
+
<div class="line"><a name="l00971"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775"> 971</a></span> <span class="keywordtype">void</span> SVFIRBuilder::visitVAArgInst(<a class="code" href="namespaceSVF.html#abcafc32093ff5ee038b5fcf6e4076ed4">VAArgInst</a> &inst)</div>
|
|
947
|
+
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> {</div>
|
|
948
|
+
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&inst);</div>
|
|
949
|
+
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
|
|
950
|
+
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
|
|
951
|
+
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  addCopyEdge(src,dst);</div>
|
|
952
|
+
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> }</div>
|
|
953
|
+
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  </div>
|
|
954
|
+
<div class="line"><a name="l00983"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a870ea33a335a7036555dd24171cf8f22"> 983</a></span> <span class="keywordtype">void</span> SVFIRBuilder::visitFreezeInst(<a class="code" href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">FreezeInst</a> &inst)</div>
|
|
955
|
+
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> {</div>
|
|
956
|
+
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&inst);</div>
|
|
957
|
+
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < inst.getNumOperands(); i++)</div>
|
|
958
|
+
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  {</div>
|
|
959
|
+
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
|
|
960
|
+
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
|
|
961
|
+
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  addCopyEdge(src,dst);</div>
|
|
962
|
+
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  }</div>
|
|
963
|
+
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> }</div>
|
|
964
964
|
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  </div>
|
|
965
|
-
<div class="line"><a name="
|
|
966
|
-
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> 
|
|
967
|
-
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> 
|
|
968
|
-
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> 
|
|
969
|
-
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <
|
|
970
|
-
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keyword">const</span> <a class="code" href="
|
|
971
|
-
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <a class="code" href="
|
|
972
|
-
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> 
|
|
973
|
-
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  </div>
|
|
974
|
-
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> 
|
|
975
|
-
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <
|
|
976
|
-
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <
|
|
977
|
-
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  <span class="
|
|
978
|
-
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> 
|
|
979
|
-
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> 
|
|
980
|
-
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  <a class="code" href="
|
|
981
|
-
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <a class="code" href="
|
|
982
|
-
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> 
|
|
983
|
-
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> 
|
|
984
|
-
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> 
|
|
985
|
-
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <
|
|
986
|
-
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> 
|
|
987
|
-
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <
|
|
988
|
-
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <
|
|
989
|
-
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <
|
|
990
|
-
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> 
|
|
991
|
-
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> 
|
|
992
|
-
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <span class="
|
|
993
|
-
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> 
|
|
994
|
-
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> 
|
|
995
|
-
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <
|
|
996
|
-
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> 
|
|
997
|
-
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> 
|
|
998
|
-
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  </div>
|
|
999
|
-
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> 
|
|
1000
|
-
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  </div>
|
|
1001
|
-
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> 
|
|
1002
|
-
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
1003
|
-
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <a class="code" href="
|
|
1004
|
-
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <a class="code" href="
|
|
1005
|
-
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> 
|
|
1006
|
-
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> 
|
|
1007
|
-
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> 
|
|
1008
|
-
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="
|
|
1009
|
-
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> 
|
|
1010
|
-
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> 
|
|
1011
|
-
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <a class="code" href="
|
|
1012
|
-
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <
|
|
1013
|
-
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> 
|
|
1014
|
-
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> 
|
|
1015
|
-
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <a class="code" href="namespaceSVF.html#
|
|
1016
|
-
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <a class="code" href="
|
|
1017
|
-
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <a class="code" href="
|
|
1018
|
-
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> 
|
|
1019
|
-
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> 
|
|
1020
|
-
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> 
|
|
1021
|
-
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> 
|
|
1022
|
-
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> 
|
|
1023
|
-
<div class="line"><a name="
|
|
1024
|
-
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">"
|
|
1025
|
-
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  </div>
|
|
1026
|
-
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> 
|
|
1027
|
-
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> }</div>
|
|
1028
|
-
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> 
|
|
1029
|
-
<div class="line"><a name="l01063"></a><span class="lineno"
|
|
1030
|
-
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> 
|
|
1031
|
-
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> 
|
|
1032
|
-
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> 
|
|
1033
|
-
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> 
|
|
1034
|
-
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> 
|
|
1035
|
-
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> 
|
|
1036
|
-
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <
|
|
1037
|
-
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> 
|
|
1038
|
-
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> 
|
|
1039
|
-
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> 
|
|
1040
|
-
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> 
|
|
1041
|
-
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> 
|
|
1042
|
-
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> 
|
|
1043
|
-
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> 
|
|
1044
|
-
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> 
|
|
1045
|
-
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> 
|
|
1046
|
-
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  <span class="comment">//
|
|
1047
|
-
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <span class="comment"
|
|
1048
|
-
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <span class="comment"
|
|
1049
|
-
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="comment">//
|
|
1050
|
-
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <span class="comment">// %
|
|
1051
|
-
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <span class="comment">// %
|
|
1052
|
-
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="comment">//
|
|
1053
|
-
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  <span class="comment"
|
|
1054
|
-
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="comment"
|
|
1055
|
-
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  <span class="comment">//
|
|
1056
|
-
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <span class="comment">// %
|
|
1057
|
-
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <span class="comment">// %
|
|
1058
|
-
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="comment">//
|
|
1059
|
-
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <
|
|
1060
|
-
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <
|
|
1061
|
-
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> 
|
|
1062
|
-
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> 
|
|
1063
|
-
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  <span class="
|
|
1064
|
-
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> 
|
|
1065
|
-
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> 
|
|
1066
|
-
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <span class="
|
|
1067
|
-
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> 
|
|
1068
|
-
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> 
|
|
1069
|
-
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> 
|
|
1070
|
-
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> 
|
|
1071
|
-
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> 
|
|
1072
|
-
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> 
|
|
1073
|
-
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="
|
|
1074
|
-
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> 
|
|
1075
|
-
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> 
|
|
1076
|
-
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> 
|
|
1077
|
-
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> 
|
|
1078
|
-
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> 
|
|
1079
|
-
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> 
|
|
1080
|
-
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> 
|
|
1081
|
-
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> 
|
|
1082
|
-
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> 
|
|
1083
|
-
<div class="line"><a name="l01117"></a><span class="lineno"
|
|
1084
|
-
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> 
|
|
1085
|
-
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> 
|
|
1086
|
-
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1087
|
-
<div class="line"><a name="
|
|
1088
|
-
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> 
|
|
1089
|
-
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> 
|
|
1090
|
-
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <span class="
|
|
1091
|
-
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> 
|
|
1092
|
-
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  </div>
|
|
1093
|
-
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> 
|
|
1094
|
-
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> 
|
|
1095
|
-
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> 
|
|
1096
|
-
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> 
|
|
1097
|
-
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  </div>
|
|
1098
|
-
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> 
|
|
1099
|
-
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="
|
|
1100
|
-
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> 
|
|
1101
|
-
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  </div>
|
|
1102
|
-
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> 
|
|
1103
|
-
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="
|
|
1104
|
-
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> 
|
|
1105
|
-
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> 
|
|
1106
|
-
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> 
|
|
1107
|
-
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> 
|
|
1108
|
-
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> 
|
|
1109
|
-
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> 
|
|
1110
|
-
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> 
|
|
1111
|
-
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> 
|
|
1112
|
-
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> 
|
|
1113
|
-
<div class="line"><a name="
|
|
1114
|
-
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> 
|
|
1115
|
-
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> 
|
|
1116
|
-
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> 
|
|
1117
|
-
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> 
|
|
1118
|
-
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <span class="
|
|
1119
|
-
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> 
|
|
1120
|
-
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> 
|
|
1121
|
-
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> 
|
|
1122
|
-
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> 
|
|
1123
|
-
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <a class="code" href="namespaceSVF.html#
|
|
1124
|
-
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <
|
|
1125
|
-
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> 
|
|
1126
|
-
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> 
|
|
1127
|
-
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  <
|
|
1128
|
-
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="
|
|
1129
|
-
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1130
|
-
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <span class="
|
|
1131
|
-
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> 
|
|
1132
|
-
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> 
|
|
1133
|
-
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> 
|
|
1134
|
-
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> 
|
|
1135
|
-
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> 
|
|
1136
|
-
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> 
|
|
1137
|
-
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> 
|
|
1138
|
-
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> 
|
|
1139
|
-
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> 
|
|
1140
|
-
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> 
|
|
1141
|
-
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> 
|
|
1142
|
-
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> 
|
|
1143
|
-
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> 
|
|
1144
|
-
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> }</div>
|
|
1145
|
-
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> 
|
|
1146
|
-
<div class="line"><a name="
|
|
1147
|
-
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> 
|
|
1148
|
-
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> 
|
|
1149
|
-
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1150
|
-
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  </div>
|
|
1151
|
-
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> 
|
|
1152
|
-
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  pag->
|
|
1153
|
-
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> 
|
|
1154
|
-
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> 
|
|
1155
|
-
<div class="line"><a name="l01196"></a><span class="lineno"
|
|
1156
|
-
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> 
|
|
1157
|
-
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> 
|
|
1158
|
-
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  PTACallGraph::CallEdgeMap::const_iterator
|
|
1159
|
-
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> 
|
|
1160
|
-
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> 
|
|
1161
|
-
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> 
|
|
1162
|
-
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1163
|
-
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> 
|
|
1164
|
-
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> 
|
|
1165
|
-
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  <span class="
|
|
1166
|
-
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> 
|
|
1167
|
-
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> 
|
|
1168
|
-
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  </div>
|
|
1169
|
-
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> 
|
|
1170
|
-
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> 
|
|
1171
|
-
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> 
|
|
1172
|
-
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <
|
|
1173
|
-
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  <
|
|
1174
|
-
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> 
|
|
1175
|
-
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> 
|
|
1176
|
-
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> 
|
|
1177
|
-
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> 
|
|
1178
|
-
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> 
|
|
1179
|
-
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> 
|
|
1180
|
-
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> 
|
|
1181
|
-
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> 
|
|
1182
|
-
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> 
|
|
1183
|
-
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> 
|
|
1184
|
-
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> 
|
|
1185
|
-
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  <span class="
|
|
1186
|
-
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> 
|
|
1187
|
-
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> 
|
|
1188
|
-
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> 
|
|
1189
|
-
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> 
|
|
1190
|
-
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="comment"
|
|
1191
|
-
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="comment">
|
|
1192
|
-
<div class="line"><a name="l01233"></a><span class="lineno"
|
|
1193
|
-
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> 
|
|
1194
|
-
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> 
|
|
1195
|
-
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> 
|
|
1196
|
-
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> 
|
|
1197
|
-
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> 
|
|
1198
|
-
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="comment">//
|
|
1199
|
-
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  <span class="comment">//
|
|
1200
|
-
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  <span class="comment">//
|
|
1201
|
-
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <span class="comment">//
|
|
1202
|
-
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  <span class="comment">//
|
|
1203
|
-
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  <span class="comment">//
|
|
1204
|
-
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <span class="comment">//
|
|
1205
|
-
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <span class="comment">//
|
|
1206
|
-
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="comment">//
|
|
1207
|
-
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  <span class="comment">// (
|
|
1208
|
-
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  <span class="comment">//
|
|
1209
|
-
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="comment">//
|
|
1210
|
-
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> 
|
|
1211
|
-
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> }</div>
|
|
1212
|
-
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> 
|
|
965
|
+
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  </div>
|
|
966
|
+
<div class="line"><a name="l00998"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515"> 998</a></span> <span class="keywordtype">void</span> SVFIRBuilder::handleDirectCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
|
|
967
|
+
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> {</div>
|
|
968
|
+
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  </div>
|
|
969
|
+
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
|
|
970
|
+
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(cs);</div>
|
|
971
|
+
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
|
|
972
|
+
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
|
|
973
|
+
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"handle direct call "</span> << svfcall-><a class="code" href="classSVF_1_1SVFValue.html#a1222d0800de27d27078e6b4a5371beb3">toString</a>() << <span class="stringliteral">" callee "</span> << <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->getName().str() << <span class="stringliteral">"\n"</span>);</div>
|
|
974
|
+
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  </div>
|
|
975
|
+
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="comment">//Only handle the ret.val. if it's used as a ptr.</span></div>
|
|
976
|
+
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = getValueNode(cs);</div>
|
|
977
|
+
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  <span class="comment">//Does it actually return a ptr?</span></div>
|
|
978
|
+
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="keywordflow">if</span> (!cs->getType()->isVoidTy())</div>
|
|
979
|
+
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  {</div>
|
|
980
|
+
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svffun);</div>
|
|
981
|
+
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag->getICFG()->getCallICFGNode(svfcall);</div>
|
|
982
|
+
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag->getICFG()->getFunExitICFGNode(svffun);</div>
|
|
983
|
+
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
|
|
984
|
+
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  }</div>
|
|
985
|
+
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <span class="comment">//Iterators for the actual and formal parameters</span></div>
|
|
986
|
+
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs->arg_size();</div>
|
|
987
|
+
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  Function::const_arg_iterator itF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->arg_begin(), ieF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->arg_end();</div>
|
|
988
|
+
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="comment">//Go through the fixed parameters.</span></div>
|
|
989
|
+
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" args:"</span>);</div>
|
|
990
|
+
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div>
|
|
991
|
+
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  {</div>
|
|
992
|
+
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
|
|
993
|
+
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keywordflow">if</span> (itA == ieA)</div>
|
|
994
|
+
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  {</div>
|
|
995
|
+
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" !! not enough args\n"</span>);</div>
|
|
996
|
+
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keywordflow">break</span>;</div>
|
|
997
|
+
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  }</div>
|
|
998
|
+
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs->getArgOperand(itA), *FA = &*itF; <span class="comment">//current actual/formal arg</span></div>
|
|
999
|
+
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  </div>
|
|
1000
|
+
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process actual parm "</span> << LLVMModuleSet::getLLVMModuleSet()->getSVFValue(AA)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
1001
|
+
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  </div>
|
|
1002
|
+
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = getValueNode(FA);</div>
|
|
1003
|
+
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = getValueNode(AA);</div>
|
|
1004
|
+
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag->getICFG()->getCallICFGNode(svfcall);</div>
|
|
1005
|
+
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag->getICFG()->getFunEntryICFGNode(svffun);</div>
|
|
1006
|
+
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  addCallEdge(srcAA, dstFA, icfgNode, entry);</div>
|
|
1007
|
+
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  }</div>
|
|
1008
|
+
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="comment">//Any remaining actual args must be varargs.</span></div>
|
|
1009
|
+
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->isVarArg())</div>
|
|
1010
|
+
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  {</div>
|
|
1011
|
+
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = getVarargNode(svffun);</div>
|
|
1012
|
+
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n varargs:"</span>);</div>
|
|
1013
|
+
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div>
|
|
1014
|
+
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  {</div>
|
|
1015
|
+
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs->getArgOperand(itA);</div>
|
|
1016
|
+
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = getValueNode(AA);</div>
|
|
1017
|
+
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag->getICFG()->getCallICFGNode(svfcall);</div>
|
|
1018
|
+
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag->getICFG()->getFunEntryICFGNode(svffun);</div>
|
|
1019
|
+
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  addCallEdge(vnAA,vaF, icfgNode,entry);</div>
|
|
1020
|
+
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  }</div>
|
|
1021
|
+
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  }</div>
|
|
1022
|
+
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  <span class="keywordflow">if</span>(itA != ieA)</div>
|
|
1023
|
+
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  {</div>
|
|
1024
|
+
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">"too many args to non-vararg func."</span>);</div>
|
|
1025
|
+
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">"("</span> + svfcall-><a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">")"</span>);</div>
|
|
1026
|
+
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  </div>
|
|
1027
|
+
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  }</div>
|
|
1028
|
+
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> }</div>
|
|
1029
|
+
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  </div>
|
|
1030
|
+
<div class="line"><a name="l01064"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59"> 1064</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* SVFIRBuilder::getBaseValueForExtArg(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div>
|
|
1031
|
+
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> {</div>
|
|
1032
|
+
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(V);</div>
|
|
1033
|
+
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  assert(value && <span class="stringliteral">"null ptr?"</span>);</div>
|
|
1034
|
+
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast<GetElementPtrInst>(value))</div>
|
|
1035
|
+
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  {</div>
|
|
1036
|
+
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
|
|
1037
|
+
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1generic__bridge__gep__type__iterator.html">bridge_gep_iterator</a> gi = <a class="code" href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">bridge_gep_begin</a>(gep), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(gep); gi != ge; ++gi)</div>
|
|
1038
|
+
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  {</div>
|
|
1039
|
+
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* op = SVFUtil::dyn_cast<ConstantInt>(gi.getOperand()))</div>
|
|
1040
|
+
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  totalidx += op->getSExtValue();</div>
|
|
1041
|
+
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  }</div>
|
|
1042
|
+
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <span class="keywordflow">if</span>(totalidx == 0 && !SVFUtil::isa<StructType>(value->getType()))</div>
|
|
1043
|
+
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  value = gep->getPointerOperand();</div>
|
|
1044
|
+
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  }</div>
|
|
1045
|
+
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  </div>
|
|
1046
|
+
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  <span class="comment">// if the argument of memcpy is the result of an allocation (1) or a casted load instruction (2),</span></div>
|
|
1047
|
+
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <span class="comment">// further steps are necessary to find the correct base value</span></div>
|
|
1048
|
+
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <span class="comment">//</span></div>
|
|
1049
|
+
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="comment">// (1)</span></div>
|
|
1050
|
+
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <span class="comment">// %call = malloc 80</span></div>
|
|
1051
|
+
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <span class="comment">// %0 = bitcast i8* %call to %struct.A*</span></div>
|
|
1052
|
+
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="comment">// %1 = bitcast %struct.B* %param to i8*</span></div>
|
|
1053
|
+
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  <span class="comment">// call void memcpy(%call, %1, 80)</span></div>
|
|
1054
|
+
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="comment">//</span></div>
|
|
1055
|
+
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  <span class="comment">// (2)</span></div>
|
|
1056
|
+
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <span class="comment">// %0 = bitcast %struct.A* %param to i8*</span></div>
|
|
1057
|
+
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <span class="comment">// %2 = bitcast %struct.B** %arrayidx to i8**</span></div>
|
|
1058
|
+
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="comment">// %3 = load i8*, i8** %2</span></div>
|
|
1059
|
+
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="comment">// call void @memcpy(%0, %3, 80)</span></div>
|
|
1060
|
+
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &cxt = LLVMModuleSet::getLLVMModuleSet()->getContext();</div>
|
|
1061
|
+
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  <span class="keywordflow">if</span> (value->getType() == PointerType::getInt8PtrTy(cxt))</div>
|
|
1062
|
+
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  {</div>
|
|
1063
|
+
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  <span class="comment">// (1)</span></div>
|
|
1064
|
+
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cb = SVFUtil::dyn_cast<CallBase>(value))</div>
|
|
1065
|
+
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  {</div>
|
|
1066
|
+
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(cb);</div>
|
|
1067
|
+
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfInst))</div>
|
|
1068
|
+
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  {</div>
|
|
1069
|
+
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* bitCast = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a837d19c740902c419206287bdb21273b">getUniqueUseViaCastInst</a>(cb))</div>
|
|
1070
|
+
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordflow">return</span> bitCast;</div>
|
|
1071
|
+
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  }</div>
|
|
1072
|
+
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  }</div>
|
|
1073
|
+
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="comment">// (2)</span></div>
|
|
1074
|
+
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* load = SVFUtil::dyn_cast<LoadInst>(value))</div>
|
|
1075
|
+
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  {</div>
|
|
1076
|
+
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">BitCastInst</a>* bitCast = SVFUtil::dyn_cast<BitCastInst>(load->getPointerOperand()))</div>
|
|
1077
|
+
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <span class="keywordflow">return</span> bitCast->getOperand(0);</div>
|
|
1078
|
+
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  }</div>
|
|
1079
|
+
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  }</div>
|
|
1080
|
+
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  </div>
|
|
1081
|
+
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">return</span> value;</div>
|
|
1082
|
+
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> }</div>
|
|
1083
|
+
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  </div>
|
|
1084
|
+
<div class="line"><a name="l01118"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a1d168cf5e868a53ddaefc7d01531197a"> 1118</a></span> <span class="keywordtype">void</span> SVFIRBuilder::preProcessExtCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
|
|
1085
|
+
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> {</div>
|
|
1086
|
+
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfinst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(cs);</div>
|
|
1087
|
+
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfcall = SVFUtil::cast<SVFCallInst>(svfinst);</div>
|
|
1088
|
+
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="keywordflow">if</span> (svfcall-><a class="code" href="classSVF_1_1SVFCallInst.html#ab654651e3117e8480544615fb1574766">getCalledFunction</a>()-><a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() == <span class="stringliteral">"dlsym"</span>)</div>
|
|
1089
|
+
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  {</div>
|
|
1090
|
+
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = cs->getArgOperand(1);</div>
|
|
1091
|
+
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast<GetElementPtrInst>(src))</div>
|
|
1092
|
+
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  src = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a07bd47ccfd02c5a2a6db26b537b2184f">stripConstantCasts</a>(gep->getPointerOperand());</div>
|
|
1093
|
+
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  </div>
|
|
1094
|
+
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  <span class="keyword">auto</span> getHookFn = [](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src)-><span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>*</div>
|
|
1095
|
+
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  {</div>
|
|
1096
|
+
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<GlobalVariable>(src))</div>
|
|
1097
|
+
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
1098
|
+
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  </div>
|
|
1099
|
+
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keyword">auto</span> *glob = SVFUtil::cast<GlobalVariable>(src);</div>
|
|
1100
|
+
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <span class="keywordflow">if</span> (!glob->hasInitializer() || !SVFUtil::isa<ConstantDataArray>(glob->getInitializer()))</div>
|
|
1101
|
+
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
1102
|
+
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  </div>
|
|
1103
|
+
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keyword">auto</span> *constarray = SVFUtil::cast<ConstantDataArray>(glob->getInitializer());</div>
|
|
1104
|
+
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a76b0d0ac69c170838cfc8ee26f4518a0">LLVMUtil::getProgFunction</a>(constarray->getAsCString().str());</div>
|
|
1105
|
+
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  };</div>
|
|
1106
|
+
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  </div>
|
|
1107
|
+
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fn = getHookFn(src))</div>
|
|
1108
|
+
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  {</div>
|
|
1109
|
+
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = getValueNode(fn);</div>
|
|
1110
|
+
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  addCopyEdge(srcNode, getValueNode(cs));</div>
|
|
1111
|
+
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  }</div>
|
|
1112
|
+
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  <span class="keywordflow">return</span>;</div>
|
|
1113
|
+
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  }</div>
|
|
1114
|
+
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a4c45df04366c21ee47ac251fbac582cc">isMemSetOrCpyExtFun</a>(svfcall-><a class="code" href="classSVF_1_1SVFCallInst.html#ab654651e3117e8480544615fb1574766">getCalledFunction</a>()))</div>
|
|
1115
|
+
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  {</div>
|
|
1116
|
+
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < cs->arg_size(); i++)</div>
|
|
1117
|
+
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  {</div>
|
|
1118
|
+
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* T = getBaseValueForExtArg(cs->getArgOperand(i))->getType();</div>
|
|
1119
|
+
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *ptype = SVFUtil::dyn_cast<PointerType>(T))</div>
|
|
1120
|
+
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  T = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(ptype);</div>
|
|
1121
|
+
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a> *st = LLVMModuleSet::getLLVMModuleSet()->getSVFType(T);</div>
|
|
1122
|
+
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  std::vector<AccessPath> fields;</div>
|
|
1123
|
+
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> numOfElems = pag->getSymbolInfo()->getNumOfFlattenElements(st);</div>
|
|
1124
|
+
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a>& context = LLVMModuleSet::getLLVMModuleSet()->getContext();</div>
|
|
1125
|
+
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> ei = 0; ei < numOfElems; ei++)</div>
|
|
1126
|
+
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  {</div>
|
|
1127
|
+
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(ei);</div>
|
|
1128
|
+
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="comment">// make a ConstantInt and create char for the content type due to byte-wise copy</span></div>
|
|
1129
|
+
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = ConstantInt::get(context, llvm::APInt(32, ei));</div>
|
|
1130
|
+
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfOffset = LLVMModuleSet::getLLVMModuleSet()->getSVFValue(<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
|
|
1131
|
+
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <span class="keywordflow">if</span> (!pag->getSymbolInfo()->hasValSym(svfOffset))</div>
|
|
1132
|
+
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  {</div>
|
|
1133
|
+
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  <a class="code" href="classSVF_1_1SymbolTableBuilder.html">SymbolTableBuilder</a> builder(pag->getSymbolInfo());</div>
|
|
1134
|
+
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  builder.<a class="code" href="classSVF_1_1SymbolTableBuilder.html#ac2fa9a797e3e2a8885ccc488030659d5">collectSym</a>(<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
|
|
1135
|
+
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  pag->addValNode(svfOffset, pag->getSymbolInfo()->getValSym(svfOffset));</div>
|
|
1136
|
+
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  }</div>
|
|
1137
|
+
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  ap.<a class="code" href="classSVF_1_1AccessPath.html#a2358a8194b5e2c4bcbb5218dee7fcbcd">addOffsetVarAndGepTypePair</a>(getPAG()->getGNode(getPAG()->getValueNode(svfOffset)), <span class="keyword">nullptr</span>);</div>
|
|
1138
|
+
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  fields.push_back(ap);</div>
|
|
1139
|
+
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  }</div>
|
|
1140
|
+
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> argId = pag->getValueNode(svfcall-><a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(i));</div>
|
|
1141
|
+
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  std::pair<const SVFType*, std::vector<AccessPath>> pairToInsert = std::make_pair(st, fields);</div>
|
|
1142
|
+
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  pag->addToTypeLocSetsMap(argId, pairToInsert);</div>
|
|
1143
|
+
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  }</div>
|
|
1144
|
+
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  }</div>
|
|
1145
|
+
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> }</div>
|
|
1146
|
+
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  </div>
|
|
1147
|
+
<div class="line"><a name="l01188"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a"> 1188</a></span> <span class="keywordtype">void</span> SVFIRBuilder::handleIndCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
|
|
1148
|
+
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> {</div>
|
|
1149
|
+
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(cs);</div>
|
|
1150
|
+
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfcalledval = LLVMModuleSet::getLLVMModuleSet()->getSVFValue(cs->getCalledOperand());</div>
|
|
1151
|
+
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  </div>
|
|
1152
|
+
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = pag->getICFG()->getCallICFGNode(svfcall);</div>
|
|
1153
|
+
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  pag->addIndirectCallsites(cbn,pag->getValueNode(svfcalledval));</div>
|
|
1154
|
+
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> }</div>
|
|
1155
|
+
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  </div>
|
|
1156
|
+
<div class="line"><a name="l01197"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767"> 1197</a></span> <span class="keywordtype">void</span> SVFIRBuilder::updateCallGraph(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
|
|
1157
|
+
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> {</div>
|
|
1158
|
+
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-><a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
|
|
1159
|
+
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-><a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
|
|
1160
|
+
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
|
|
1161
|
+
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  {</div>
|
|
1162
|
+
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter->first;</div>
|
|
1163
|
+
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::cast<CallBase>(LLVMModuleSet::getLLVMModuleSet()->getLLVMValue(callBlock-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()));</div>
|
|
1164
|
+
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  assert(callBlock-><a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() && <span class="stringliteral">"this is not an indirect call?"</span>);</div>
|
|
1165
|
+
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& functions = iter->second;</div>
|
|
1166
|
+
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
|
|
1167
|
+
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  {</div>
|
|
1168
|
+
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee = SVFUtil::cast<Function>(LLVMModuleSet::getLLVMModuleSet()->getLLVMValue(*func_iter));</div>
|
|
1169
|
+
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  </div>
|
|
1170
|
+
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
|
|
1171
|
+
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  {</div>
|
|
1172
|
+
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  setCurrentLocation(callee, callee->empty() ? <span class="keyword">nullptr</span> : &callee->getEntryBlock());</div>
|
|
1173
|
+
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfinst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(callbase);</div>
|
|
1174
|
+
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(callee);</div>
|
|
1175
|
+
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  handleExtCall(svfinst, svfcallee);</div>
|
|
1176
|
+
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  }</div>
|
|
1177
|
+
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  <span class="keywordflow">else</span></div>
|
|
1178
|
+
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  {</div>
|
|
1179
|
+
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  setCurrentLocation(callBlock-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>(), callBlock-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()-><a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>());</div>
|
|
1180
|
+
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  handleDirectCall(<span class="keyword">const_cast<</span><a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>*<span class="keyword">></span>(callbase), callee);</div>
|
|
1181
|
+
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  }</div>
|
|
1182
|
+
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  }</div>
|
|
1183
|
+
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  }</div>
|
|
1184
|
+
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  </div>
|
|
1185
|
+
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  <span class="comment">// dump SVFIR</span></div>
|
|
1186
|
+
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="keywordflow">if</span> (Options::PAGDotGraph())</div>
|
|
1187
|
+
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  pag->dump(<span class="stringliteral">"svfir_final"</span>);</div>
|
|
1188
|
+
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> }</div>
|
|
1189
|
+
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  </div>
|
|
1190
|
+
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="comment">/*</span></div>
|
|
1191
|
+
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="comment"> * TODO: more sanity checks might be needed here</span></div>
|
|
1192
|
+
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="comment"> */</span></div>
|
|
1193
|
+
<div class="line"><a name="l01234"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60"> 1234</a></span> <span class="keywordtype">void</span> SVFIRBuilder::sanityCheck()</div>
|
|
1194
|
+
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> {</div>
|
|
1195
|
+
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag->begin(); nIter != pag->end(); ++nIter)</div>
|
|
1196
|
+
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  {</div>
|
|
1197
|
+
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  (void) pag->getGNode(nIter->first);</div>
|
|
1198
|
+
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="comment">//TODO::</span></div>
|
|
1199
|
+
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
|
|
1200
|
+
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
|
|
1201
|
+
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <span class="comment">// then it has to be an object node.</span></div>
|
|
1202
|
+
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  <span class="comment">// (2) make sure every variable should be initialized</span></div>
|
|
1203
|
+
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
|
|
1204
|
+
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <span class="comment">// when loading a pointer value should make sure</span></div>
|
|
1205
|
+
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <span class="comment">// some value has been store into this pointer before</span></div>
|
|
1206
|
+
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
|
|
1207
|
+
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
|
|
1208
|
+
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
|
|
1209
|
+
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="comment">// are set correctly for dummy gepval node</span></div>
|
|
1210
|
+
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div>
|
|
1211
|
+
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  }</div>
|
|
1212
|
+
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> }</div>
|
|
1213
1213
|
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  </div>
|
|
1214
|
-
<div class="line"><a name="
|
|
1215
|
-
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> 
|
|
1216
|
-
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> 
|
|
1217
|
-
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
1218
|
-
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  <
|
|
1219
|
-
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> 
|
|
1220
|
-
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> 
|
|
1221
|
-
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  <span class="
|
|
1222
|
-
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> 
|
|
1223
|
-
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="comment"> *
|
|
1224
|
-
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="comment"> *
|
|
1225
|
-
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="comment"> *
|
|
1226
|
-
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="comment"> *
|
|
1227
|
-
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="comment"> *
|
|
1228
|
-
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment">
|
|
1229
|
-
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> 
|
|
1230
|
-
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> 
|
|
1231
|
-
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> 
|
|
1232
|
-
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <span class="comment">// We
|
|
1233
|
-
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  <span class="
|
|
1234
|
-
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1235
|
-
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> 
|
|
1236
|
-
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> 
|
|
1237
|
-
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> 
|
|
1238
|
-
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> 
|
|
1239
|
-
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> 
|
|
1240
|
-
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> 
|
|
1241
|
-
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> 
|
|
1242
|
-
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> 
|
|
1243
|
-
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> 
|
|
1244
|
-
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> 
|
|
1214
|
+
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  </div>
|
|
1215
|
+
<div class="line"><a name="l01260"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a0c2e8a7b9aeabf88618775d1ae57f276"> 1260</a></span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGepValVar(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* val, <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>& ap, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType)</div>
|
|
1216
|
+
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> {</div>
|
|
1217
|
+
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = pag->getBaseValVar(pag->getValueNode(val));</div>
|
|
1218
|
+
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = pag->getGepValVar(curVal, base, ap);</div>
|
|
1219
|
+
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
|
|
1220
|
+
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  {</div>
|
|
1221
|
+
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  assert(((<span class="keywordtype">int</span>) UINT_MAX)==-1 && <span class="stringliteral">"maximum limit of unsigned int is not -1?"</span>);</div>
|
|
1222
|
+
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  <span class="comment">/*</span></div>
|
|
1223
|
+
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="comment"> * getGepValVar can only be called from two places:</span></div>
|
|
1224
|
+
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
|
|
1225
|
+
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
|
|
1226
|
+
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="comment"> * so curVal can only be</span></div>
|
|
1227
|
+
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="comment"> * 1. Instruction</span></div>
|
|
1228
|
+
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment"> * 2. GlobalVariable</span></div>
|
|
1229
|
+
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="comment"> */</span></div>
|
|
1230
|
+
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  assert((SVFUtil::isa<SVFInstruction, SVFGlobalValue>(curVal)) && <span class="stringliteral">"curVal not an instruction or a globalvariable?"</span>);</div>
|
|
1231
|
+
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  </div>
|
|
1232
|
+
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
|
|
1233
|
+
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
|
|
1234
|
+
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
|
|
1235
|
+
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
|
|
1236
|
+
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  setCurrentLocation(curVal, <span class="keyword">nullptr</span>);</div>
|
|
1237
|
+
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= pag->addGepValNode(curVal, val, ap, NodeIDAllocator::get()->allocateValueId(),elementType-><a class="code" href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">getPointerTo</a>());</div>
|
|
1238
|
+
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  addGepEdge(base, gepNode, ap, <span class="keyword">true</span>);</div>
|
|
1239
|
+
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  setCurrentLocation(cval, cbb);</div>
|
|
1240
|
+
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <span class="keywordflow">return</span> gepNode;</div>
|
|
1241
|
+
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  }</div>
|
|
1242
|
+
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  <span class="keywordflow">else</span></div>
|
|
1243
|
+
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  <span class="keywordflow">return</span> gepval;</div>
|
|
1244
|
+
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> }</div>
|
|
1245
1245
|
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  </div>
|
|
1246
|
-
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> 
|
|
1247
|
-
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="comment"
|
|
1248
|
-
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment"> *
|
|
1249
|
-
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment"> *
|
|
1250
|
-
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="comment"> *
|
|
1251
|
-
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="comment"> *
|
|
1252
|
-
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment"> *
|
|
1253
|
-
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment"> *
|
|
1254
|
-
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment"> *
|
|
1255
|
-
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment"> *
|
|
1256
|
-
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment"> *
|
|
1257
|
-
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment"> *
|
|
1258
|
-
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="comment">
|
|
1259
|
-
<div class="line"><a name="l01304"></a><span class="lineno"
|
|
1260
|
-
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> 
|
|
1261
|
-
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> 
|
|
1262
|
-
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> 
|
|
1263
|
-
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  </div>
|
|
1264
|
-
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> 
|
|
1265
|
-
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> 
|
|
1266
|
-
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#
|
|
1267
|
-
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> 
|
|
1268
|
-
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> 
|
|
1269
|
-
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> 
|
|
1270
|
-
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  <
|
|
1271
|
-
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> 
|
|
1272
|
-
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> 
|
|
1273
|
-
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>*
|
|
1274
|
-
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  <span class="
|
|
1275
|
-
<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> 
|
|
1276
|
-
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> 
|
|
1277
|
-
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> 
|
|
1278
|
-
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> 
|
|
1279
|
-
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> 
|
|
1280
|
-
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> 
|
|
1281
|
-
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> 
|
|
1282
|
-
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> 
|
|
1283
|
-
<div class="line"><a name="
|
|
1284
|
-
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> 
|
|
1285
|
-
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> 
|
|
1286
|
-
<div class="line"><a name="
|
|
1287
|
-
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> 
|
|
1288
|
-
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> 
|
|
1289
|
-
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> 
|
|
1290
|
-
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> 
|
|
1291
|
-
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> 
|
|
1292
|
-
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> 
|
|
1293
|
-
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> 
|
|
1294
|
-
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> 
|
|
1295
|
-
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> 
|
|
1296
|
-
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> 
|
|
1297
|
-
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> 
|
|
1298
|
-
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> 
|
|
1299
|
-
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> 
|
|
1300
|
-
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> 
|
|
1301
|
-
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> 
|
|
1302
|
-
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> 
|
|
1303
|
-
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> 
|
|
1304
|
-
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> 
|
|
1305
|
-
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  SVFUtil::isa<
|
|
1306
|
-
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> 
|
|
1307
|
-
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> 
|
|
1308
|
-
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> 
|
|
1309
|
-
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> 
|
|
1310
|
-
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> 
|
|
1311
|
-
<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> 
|
|
1312
|
-
<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> 
|
|
1313
|
-
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> 
|
|
1314
|
-
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> 
|
|
1315
|
-
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> 
|
|
1316
|
-
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> 
|
|
1317
|
-
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> 
|
|
1318
|
-
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> 
|
|
1319
|
-
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> 
|
|
1320
|
-
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> 
|
|
1321
|
-
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> 
|
|
1322
|
-
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> 
|
|
1323
|
-
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> 
|
|
1324
|
-
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  <a class="code" href="
|
|
1325
|
-
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  <
|
|
1326
|
-
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> 
|
|
1327
|
-
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> 
|
|
1328
|
-
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> 
|
|
1329
|
-
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> 
|
|
1330
|
-
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> 
|
|
1331
|
-
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  <a class="code" href="
|
|
1332
|
-
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <
|
|
1333
|
-
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> 
|
|
1334
|
-
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> 
|
|
1335
|
-
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> }</div>
|
|
1336
|
-
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> 
|
|
1246
|
+
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  </div>
|
|
1247
|
+
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="comment">/*</span></div>
|
|
1248
|
+
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment"> * curVal <--------> PAGEdge</span></div>
|
|
1249
|
+
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment"> * Instruction Any Edge</span></div>
|
|
1250
|
+
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="comment"> * Argument CopyEdge (SVFIR::addFormalParamBlackHoleAddrEdge)</span></div>
|
|
1251
|
+
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="comment"> * ConstantExpr CopyEdge (Int2PtrConstantExpr CastConstantExpr SVFIRBuilder::processCE)</span></div>
|
|
1252
|
+
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment"> * GepEdge (GepConstantExpr SVFIRBuilder::processCE)</span></div>
|
|
1253
|
+
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment"> * ConstantPointerNull CopyEdge (3-->2 NullPtr-->BlkPtr SVFIR::addNullPtrNode)</span></div>
|
|
1254
|
+
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment"> * AddrEdge (0-->2 BlkObj-->BlkPtr SVFIR::addNullPtrNode)</span></div>
|
|
1255
|
+
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment"> * GlobalVariable AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
|
|
1256
|
+
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment"> * GepEdge (SVFIRBuilder::getGlobalVarField)</span></div>
|
|
1257
|
+
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment"> * Function AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
|
|
1258
|
+
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="comment"> * Constant StoreEdge (SVFIRBuilder::InitialGlobal)</span></div>
|
|
1259
|
+
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="comment"> */</span></div>
|
|
1260
|
+
<div class="line"><a name="l01305"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01"> 1305</a></span> <span class="keywordtype">void</span> SVFIRBuilder::setCurrentBBAndValueForPAGEdge(<a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge)</div>
|
|
1261
|
+
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> {</div>
|
|
1262
|
+
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  <span class="keywordflow">if</span> (SVFModule::pagReadFromTXT())</div>
|
|
1263
|
+
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <span class="keywordflow">return</span>;</div>
|
|
1264
|
+
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  </div>
|
|
1265
|
+
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  assert(curVal && <span class="stringliteral">"current Val is nullptr?"</span>);</div>
|
|
1266
|
+
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#a0e45ab5b38059371c47d5f2011118a4d">setBB</a>(curBB!=<span class="keyword">nullptr</span> ? curBB : <span class="keyword">nullptr</span>);</div>
|
|
1267
|
+
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(curVal);</div>
|
|
1268
|
+
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  <span class="comment">// backmap in valuToEdgeMap</span></div>
|
|
1269
|
+
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  pag->mapValueToEdge(curVal, edge);</div>
|
|
1270
|
+
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag->getICFG()->getGlobalICFGNode();</div>
|
|
1271
|
+
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = SVFUtil::dyn_cast<SVFInstruction>(curVal))</div>
|
|
1272
|
+
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  {</div>
|
|
1273
|
+
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getFunction();</div>
|
|
1274
|
+
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getFunction();</div>
|
|
1275
|
+
<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> && !SVFUtil::isa<RetPE>(edge) && !SVFUtil::isa<SVFFunction>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getValue()))</div>
|
|
1276
|
+
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  {</div>
|
|
1277
|
+
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  assert(srcFun==curInst->getFunction() && <span class="stringliteral">"SrcNode of the PAGEdge not in the same function?"</span>);</div>
|
|
1278
|
+
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  }</div>
|
|
1279
|
+
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> && !SVFUtil::isa<CallPE>(edge) && !SVFUtil::isa<SVFFunction>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getValue()))</div>
|
|
1280
|
+
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  {</div>
|
|
1281
|
+
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  assert(dstFun==curInst->getFunction() && <span class="stringliteral">"DstNode of the PAGEdge not in the same function?"</span>);</div>
|
|
1282
|
+
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  }</div>
|
|
1283
|
+
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  </div>
|
|
1284
|
+
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  <span class="keywordflow">if</span> (!(SVFUtil::isa<GepStmt>(edge) && SVFUtil::isa<GepValVar>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div>
|
|
1285
|
+
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  assert(curBB && <span class="stringliteral">"instruction does not have a basic block??"</span>);</div>
|
|
1286
|
+
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  </div>
|
|
1287
|
+
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  <span class="keywordflow">if</span>(curInst->isRetInst())</div>
|
|
1288
|
+
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  {</div>
|
|
1289
|
+
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  icfgNode = pag->getICFG()->getFunExitICFGNode(curInst->getFunction());</div>
|
|
1290
|
+
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  }</div>
|
|
1291
|
+
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  <span class="keywordflow">else</span></div>
|
|
1292
|
+
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  {</div>
|
|
1293
|
+
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keywordflow">if</span>(SVFUtil::isa<RetPE>(edge))</div>
|
|
1294
|
+
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  icfgNode = pag->getICFG()->getRetICFGNode(curInst);</div>
|
|
1295
|
+
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  <span class="keywordflow">else</span></div>
|
|
1296
|
+
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  icfgNode = pag->getICFG()->getICFGNode(curInst);</div>
|
|
1297
|
+
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  }</div>
|
|
1298
|
+
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  }</div>
|
|
1299
|
+
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* arg = SVFUtil::dyn_cast<SVFArgument>(curVal))</div>
|
|
1300
|
+
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  {</div>
|
|
1301
|
+
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  assert(curBB && (curBB->getParent()->getEntryBlock() == curBB));</div>
|
|
1302
|
+
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  icfgNode = pag->getICFG()->getFunEntryICFGNode(arg->getParent());</div>
|
|
1303
|
+
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  }</div>
|
|
1304
|
+
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<SVFConstant>(curVal) ||</div>
|
|
1305
|
+
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  SVFUtil::isa<SVFFunction>(curVal) ||</div>
|
|
1306
|
+
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  SVFUtil::isa<SVFMetadataAsValue>(curVal))</div>
|
|
1307
|
+
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  {</div>
|
|
1308
|
+
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  <span class="keywordflow">if</span> (!curBB)</div>
|
|
1309
|
+
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  pag->addGlobalPAGEdge(edge);</div>
|
|
1310
|
+
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  <span class="keywordflow">else</span></div>
|
|
1311
|
+
<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  {</div>
|
|
1312
|
+
<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  icfgNode = pag->getICFG()->getICFGNode(curBB->front());</div>
|
|
1313
|
+
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  }</div>
|
|
1314
|
+
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  }</div>
|
|
1315
|
+
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <span class="keywordflow">else</span></div>
|
|
1316
|
+
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  {</div>
|
|
1317
|
+
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"what else value can we have?"</span>);</div>
|
|
1318
|
+
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  }</div>
|
|
1319
|
+
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  </div>
|
|
1320
|
+
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>  pag->addToSVFStmtList(icfgNode,edge);</div>
|
|
1321
|
+
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  icfgNode-><a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
|
|
1322
|
+
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::dyn_cast<CallPE>(edge))</div>
|
|
1323
|
+
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  {</div>
|
|
1324
|
+
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>*<span class="keyword">></span>(callPE->getCallSite());</div>
|
|
1325
|
+
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entryNode = <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>*<span class="keyword">></span>(callPE->getFunEntryICFGNode());</div>
|
|
1326
|
+
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag->getICFG()->hasInterICFGEdge(callNode,entryNode, ICFGEdge::CallCF))</div>
|
|
1327
|
+
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  SVFUtil::cast<CallCFGEdge>(edge)->addCallPE(callPE);</div>
|
|
1328
|
+
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  }</div>
|
|
1329
|
+
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::dyn_cast<RetPE>(edge))</div>
|
|
1330
|
+
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  {</div>
|
|
1331
|
+
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retNode = <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>*<span class="keyword">></span>(retPE->getCallSite()->getRetICFGNode());</div>
|
|
1332
|
+
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitNode = <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>*<span class="keyword">></span>(retPE->getFunExitICFGNode());</div>
|
|
1333
|
+
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag->getICFG()->hasInterICFGEdge(exitNode, retNode, ICFGEdge::RetCF))</div>
|
|
1334
|
+
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  SVFUtil::cast<RetCFGEdge>(edge)->addRetPE(retPE);</div>
|
|
1335
|
+
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  }</div>
|
|
1336
|
+
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> }</div>
|
|
1337
1337
|
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>  </div>
|
|
1338
|
-
<div class="line"><a name="
|
|
1339
|
-
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> 
|
|
1340
|
-
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> 
|
|
1341
|
-
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  <a class="code" href="
|
|
1342
|
-
<div class="line"><a name="
|
|
1343
|
-
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> 
|
|
1344
|
-
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  </div>
|
|
1345
|
-
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> 
|
|
1346
|
-
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  <
|
|
1347
|
-
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  <
|
|
1348
|
-
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  <span class="
|
|
1349
|
-
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> 
|
|
1350
|
-
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> 
|
|
1351
|
-
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> 
|
|
1352
|
-
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> 
|
|
1338
|
+
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  </div>
|
|
1339
|
+
<div class="line"><a name="l01392"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7"> 1392</a></span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> SVFIRBuilder::getAccessPathFromBaseNode(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
|
|
1340
|
+
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> {</div>
|
|
1341
|
+
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag->getGNode(nodeId);</div>
|
|
1342
|
+
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& geps = node-><a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(SVFStmt::Gep);</div>
|
|
1343
|
+
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  <span class="keywordflow">if</span>(geps.empty())</div>
|
|
1344
|
+
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
|
|
1345
|
+
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  </div>
|
|
1346
|
+
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  assert(geps.size()==1 && <span class="stringliteral">"one node can only be connected by at most one gep edge!"</span>);</div>
|
|
1347
|
+
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
|
|
1348
|
+
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepEdge = SVFUtil::cast<GepStmt>(*it);</div>
|
|
1349
|
+
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  <span class="keywordflow">if</span>(gepEdge-><a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
|
|
1350
|
+
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
|
|
1351
|
+
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>  <span class="keywordflow">else</span></div>
|
|
1352
|
+
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  <span class="keywordflow">return</span> gepEdge-><a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
|
|
1353
|
+
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> }</div>
|
|
1353
1354
|
</div><!-- fragment --></div><!-- contents -->
|
|
1354
1355
|
<div class="ttc" id="anamespaceSVF_html_a5c4820681ef340339ddded756eb82ae1"><div class="ttname"><a href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">SVF::APOffset</a></div><div class="ttdeci">s64_t APOffset</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00061">SVFType.h:61</a></div></div>
|
|
1355
1356
|
<div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a3cbb4b4089c8b27d01da15f2d2f22e14"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">SVF::SVFCallInst::getArgOperand</a></div><div class="ttdeci">const SVFValue * getArgOperand(u32_t i) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00712">SVFValue.h:712</a></div></div>
|
|
@@ -1476,12 +1477,13 @@ $(function() {
|
|
|
1476
1477
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
|
|
1477
1478
|
<div class="ttc" id="anamespaceSVF_html_afc1b50355821e7299df03b026e36f1df"><div class="ttname"><a href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">SVF::User</a></div><div class="ttdeci">llvm::User User</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00140">BasicTypes.h:140</a></div></div>
|
|
1478
1479
|
<div class="ttc" id="aclassSVF_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>
|
|
1480
|
+
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a3d34fcdfc98add848a34fd5259c11eb2"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">SVF::LLVMUtil::getDefFunForMultipleModule</a></div><div class="ttdeci">const Function * getDefFunForMultipleModule(const Function *fun)</div><div class="ttdoc">Get the definition of a function across multiple modules.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00058">LLVMUtil.h:58</a></div></div>
|
|
1479
1481
|
<div class="ttc" id="anamespaceSVF_html_a56cb9d6d1e05f6c31bfe1a4045bc8b5f"><div class="ttname"><a href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">SVF::InvokeInst</a></div><div class="ttdeci">llvm::InvokeInst InvokeInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00161">BasicTypes.h:161</a></div></div>
|
|
1480
1482
|
<div class="ttc" id="aclassllvm_1_1generic__bridge__gep__type__iterator_html"><div class="ttname"><a href="classllvm_1_1generic__bridge__gep__type__iterator.html">llvm::generic_bridge_gep_type_iterator</a></div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00017">GEPTypeBridgeIterator.h:17</a></div></div>
|
|
1481
1483
|
<div class="ttc" id="aclassSVF_1_1FunExitICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunExitICFGNode.html">SVF::FunExitICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00324">ICFGNode.h:324</a></div></div>
|
|
1482
1484
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a4550f2fb815882edfb666ac818792064"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(const std::string &msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>
|
|
1483
1485
|
<div class="ttc" id="aclassSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph< SVFVar, SVFStmt >::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators.</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00359">GenericGraph.h:359</a></div></div>
|
|
1484
|
-
<div class="ttc" id="aclassSVF_1_1LLVMLoopAnalysis_html_a17e4805c2db146430c58af35625a388d"><div class="ttname"><a href="classSVF_1_1LLVMLoopAnalysis.html#a17e4805c2db146430c58af35625a388d">SVF::LLVMLoopAnalysis::build</a></div><div class="ttdeci">virtual void build(ICFG *icfg)</div><div class="ttdoc">Start from here.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMLoopAnalysis_8cpp_source.html#
|
|
1486
|
+
<div class="ttc" id="aclassSVF_1_1LLVMLoopAnalysis_html_a17e4805c2db146430c58af35625a388d"><div class="ttname"><a href="classSVF_1_1LLVMLoopAnalysis.html#a17e4805c2db146430c58af35625a388d">SVF::LLVMLoopAnalysis::build</a></div><div class="ttdeci">virtual void build(ICFG *icfg)</div><div class="ttdoc">Start from here.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMLoopAnalysis_8cpp_source.html#l00088">LLVMLoopAnalysis.cpp:88</a></div></div>
|
|
1485
1487
|
<div class="ttc" id="aclassSVF_1_1CHGraph_html"><div class="ttname"><a href="classSVF_1_1CHGraph.html">SVF::CHGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00215">CHG.h:215</a></div></div>
|
|
1486
1488
|
<div class="ttc" id="aclassSVF_1_1ICFG_html"><div class="ttname"><a href="classSVF_1_1ICFG.html">SVF::ICFG</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00047">ICFG.h:47</a></div></div>
|
|
1487
1489
|
<div class="ttc" id="anamespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00118">BasicTypes.h:118</a></div></div>
|