svf-tools 1.0.811 → 1.0.813
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/AccessPath_8cpp_source.html +159 -136
- package/SVF-doxygen/html/AccessPath_8h_source.html +45 -42
- package/SVF-doxygen/html/ConsExeState_8cpp_source.html +21 -21
- package/SVF-doxygen/html/ConsExeState_8h_source.html +384 -385
- package/SVF-doxygen/html/ConsG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/ContextDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ExeState_8cpp_source.html +24 -24
- package/SVF-doxygen/html/ExeState_8h_source.html +227 -217
- package/SVF-doxygen/html/FlowDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ICFGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/ICFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/IRGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/IntervalExeState_8cpp_source.html +8 -8
- package/SVF-doxygen/html/IntervalExeState_8h_source.html +412 -408
- package/SVF-doxygen/html/PAGBuilderFromFile_8cpp_source.html +2 -2
- package/SVF-doxygen/html/RelationSolver_8cpp_source.html +3 -3
- package/SVF-doxygen/html/SVFFileSystem_8cpp_source.html +13 -13
- package/SVF-doxygen/html/SVFFileSystem_8h_source.html +11 -11
- package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +273 -272
- package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +28 -28
- package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +980 -973
- package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +169 -169
- package/SVF-doxygen/html/SVFIR2Relation_8cpp_source.html +33 -33
- package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +11 -11
- package/SVF-doxygen/html/SVFIR_8cpp_source.html +14 -14
- package/SVF-doxygen/html/SVFIR_8h_source.html +11 -11
- package/SVF-doxygen/html/SVFStatements_8cpp_source.html +19 -19
- package/SVF-doxygen/html/SVFStatements_8h_source.html +829 -830
- package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +7 -7
- package/SVF-doxygen/html/SaberCondAllocator_8h_source.html +2 -2
- package/SVF-doxygen/html/SymState_8h_source.html +1 -1
- package/SVF-doxygen/html/VFGNode_8h_source.html +7 -7
- package/SVF-doxygen/html/VFG_8cpp_source.html +15 -15
- package/SVF-doxygen/html/VFG_8h_source.html +10 -10
- package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +18 -17
- package/SVF-doxygen/html/classSVF_1_1AccessPath.html +206 -153
- package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +68 -68
- package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +51 -51
- package/SVF-doxygen/html/classSVF_1_1BranchVFGNode.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1CallPE.html +35 -35
- package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +97 -97
- package/SVF-doxygen/html/classSVF_1_1ConsExeState-members.html +74 -74
- package/SVF-doxygen/html/classSVF_1_1ConsExeState.html +412 -394
- package/SVF-doxygen/html/classSVF_1_1ConstraintGraph.html +8 -8
- package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ExeState-members.html +34 -34
- package/SVF-doxygen/html/classSVF_1_1ExeState.html +287 -272
- package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1GepStmt-members.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1GepStmt.html +37 -37
- package/SVF-doxygen/html/classSVF_1_1ICFG.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1IntervalExeState-members.html +78 -78
- package/SVF-doxygen/html/classSVF_1_1IntervalExeState.html +445 -434
- package/SVF-doxygen/html/classSVF_1_1MultiOpndStmt.html +48 -48
- package/SVF-doxygen/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +46 -46
- package/SVF-doxygen/html/classSVF_1_1RelationSolver.html +3 -3
- package/SVF-doxygen/html/classSVF_1_1RetPE.html +35 -35
- package/SVF-doxygen/html/classSVF_1_1SVFIR.html +13 -13
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState-members.html +28 -28
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +296 -295
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState-members.html +15 -16
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +1087 -1128
- package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +4 -4
- package/SVF-doxygen/html/classSVF_1_1SVFIRReader.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SVFIRWriter.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +7 -7
- package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +38 -38
- package/SVF-doxygen/html/classSVF_1_1SymState.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +22 -22
- package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +21 -21
- package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +44 -44
- package/SVF-doxygen/html/classSVF_1_1VFG.html +15 -15
- package/SVF-doxygen/html/functions.html +6 -6
- package/SVF-doxygen/html/functions_a.html +13 -8
- package/SVF-doxygen/html/functions_b.html +3 -3
- package/SVF-doxygen/html/functions_e.html +2 -2
- package/SVF-doxygen/html/functions_func_e.html +2 -2
- package/SVF-doxygen/html/functions_func_g.html +44 -45
- package/SVF-doxygen/html/functions_func_i.html +12 -22
- package/SVF-doxygen/html/functions_func_l.html +6 -6
- package/SVF-doxygen/html/functions_func_n.html +3 -3
- package/SVF-doxygen/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/functions_func_s.html +7 -7
- package/SVF-doxygen/html/functions_func_w.html +3 -3
- package/SVF-doxygen/html/functions_g.html +42 -43
- package/SVF-doxygen/html/functions_i.html +30 -37
- package/SVF-doxygen/html/functions_l.html +8 -8
- package/SVF-doxygen/html/functions_n.html +7 -7
- package/SVF-doxygen/html/functions_o.html +20 -21
- package/SVF-doxygen/html/functions_p.html +12 -12
- package/SVF-doxygen/html/functions_r.html +3 -1
- package/SVF-doxygen/html/functions_s.html +18 -20
- package/SVF-doxygen/html/functions_t.html +10 -10
- package/SVF-doxygen/html/functions_type.html +5 -0
- package/SVF-doxygen/html/functions_type_i.html +4 -4
- package/SVF-doxygen/html/functions_type_v.html +3 -8
- package/SVF-doxygen/html/functions_v.html +10 -13
- package/SVF-doxygen/html/functions_vars.html +6 -6
- package/SVF-doxygen/html/functions_vars_g.html +2 -2
- package/SVF-doxygen/html/functions_vars_i.html +3 -0
- package/SVF-doxygen/html/functions_vars_o.html +0 -3
- package/SVF-doxygen/html/functions_w.html +11 -11
- package/SVF-doxygen/html/search/all_0.js +4 -4
- package/SVF-doxygen/html/search/all_1.js +210 -209
- package/SVF-doxygen/html/search/all_10.js +324 -324
- package/SVF-doxygen/html/search/all_11.js +222 -222
- package/SVF-doxygen/html/search/all_12.js +544 -544
- package/SVF-doxygen/html/search/all_13.js +191 -191
- package/SVF-doxygen/html/search/all_14.js +67 -67
- package/SVF-doxygen/html/search/all_15.js +167 -169
- package/SVF-doxygen/html/search/all_16.js +63 -63
- package/SVF-doxygen/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/search/all_18.js +1 -1
- package/SVF-doxygen/html/search/all_19.js +11 -11
- package/SVF-doxygen/html/search/all_1a.js +172 -172
- package/SVF-doxygen/html/search/all_2.js +169 -169
- package/SVF-doxygen/html/search/all_3.js +642 -642
- package/SVF-doxygen/html/search/all_4.js +233 -233
- package/SVF-doxygen/html/search/all_5.js +119 -119
- package/SVF-doxygen/html/search/all_6.js +225 -225
- package/SVF-doxygen/html/search/all_7.js +868 -868
- package/SVF-doxygen/html/search/all_8.js +197 -197
- package/SVF-doxygen/html/search/all_9.js +606 -611
- package/SVF-doxygen/html/search/all_a.js +46 -46
- package/SVF-doxygen/html/search/all_b.js +26 -26
- package/SVF-doxygen/html/search/all_c.js +116 -116
- package/SVF-doxygen/html/search/all_d.js +196 -196
- package/SVF-doxygen/html/search/all_e.js +207 -207
- package/SVF-doxygen/html/search/all_f.js +115 -116
- package/SVF-doxygen/html/search/classes_0.js +26 -26
- package/SVF-doxygen/html/search/classes_1.js +9 -9
- package/SVF-doxygen/html/search/classes_10.js +73 -73
- package/SVF-doxygen/html/search/classes_11.js +15 -15
- package/SVF-doxygen/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/search/classes_13.js +10 -10
- package/SVF-doxygen/html/search/classes_14.js +14 -14
- package/SVF-doxygen/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/search/classes_2.js +80 -80
- package/SVF-doxygen/html/search/classes_3.js +37 -37
- package/SVF-doxygen/html/search/classes_4.js +9 -9
- package/SVF-doxygen/html/search/classes_5.js +28 -28
- package/SVF-doxygen/html/search/classes_6.js +104 -104
- package/SVF-doxygen/html/search/classes_7.js +33 -33
- package/SVF-doxygen/html/search/classes_8.js +56 -56
- package/SVF-doxygen/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/search/classes_a.js +12 -12
- package/SVF-doxygen/html/search/classes_b.js +29 -29
- package/SVF-doxygen/html/search/classes_c.js +6 -6
- package/SVF-doxygen/html/search/classes_d.js +18 -18
- package/SVF-doxygen/html/search/classes_e.js +36 -36
- package/SVF-doxygen/html/search/classes_f.js +25 -25
- package/SVF-doxygen/html/search/defines_0.js +3 -3
- package/SVF-doxygen/html/search/defines_1.js +2 -2
- package/SVF-doxygen/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/search/defines_3.js +21 -21
- package/SVF-doxygen/html/search/defines_4.js +2 -2
- package/SVF-doxygen/html/search/defines_5.js +4 -4
- package/SVF-doxygen/html/search/defines_6.js +2 -2
- package/SVF-doxygen/html/search/defines_7.js +5 -5
- package/SVF-doxygen/html/search/defines_8.js +11 -11
- package/SVF-doxygen/html/search/defines_9.js +9 -9
- package/SVF-doxygen/html/search/defines_a.js +2 -2
- package/SVF-doxygen/html/search/defines_b.js +1 -1
- package/SVF-doxygen/html/search/defines_c.js +3 -3
- package/SVF-doxygen/html/search/defines_d.js +2 -2
- package/SVF-doxygen/html/search/defines_e.js +7 -7
- package/SVF-doxygen/html/search/defines_f.js +3 -3
- package/SVF-doxygen/html/search/enums_0.js +3 -3
- package/SVF-doxygen/html/search/enums_1.js +2 -2
- package/SVF-doxygen/html/search/enums_10.js +1 -1
- package/SVF-doxygen/html/search/enums_11.js +1 -1
- package/SVF-doxygen/html/search/enums_2.js +8 -8
- package/SVF-doxygen/html/search/enums_3.js +1 -1
- package/SVF-doxygen/html/search/enums_4.js +3 -3
- package/SVF-doxygen/html/search/enums_5.js +1 -1
- package/SVF-doxygen/html/search/enums_6.js +2 -2
- package/SVF-doxygen/html/search/enums_7.js +2 -2
- package/SVF-doxygen/html/search/enums_8.js +4 -4
- package/SVF-doxygen/html/search/enums_9.js +1 -1
- package/SVF-doxygen/html/search/enums_a.js +1 -1
- package/SVF-doxygen/html/search/enums_b.js +7 -7
- package/SVF-doxygen/html/search/enums_c.js +1 -1
- package/SVF-doxygen/html/search/enums_d.js +4 -4
- package/SVF-doxygen/html/search/enums_e.js +2 -2
- package/SVF-doxygen/html/search/enums_f.js +4 -4
- package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
- package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
- package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
- package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
- package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
- package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
- package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
- package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
- package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
- package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
- package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
- package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
- package/SVF-doxygen/html/search/files_0.js +13 -13
- package/SVF-doxygen/html/search/files_1.js +7 -7
- package/SVF-doxygen/html/search/files_10.js +8 -8
- package/SVF-doxygen/html/search/files_11.js +8 -8
- package/SVF-doxygen/html/search/files_12.js +2 -2
- package/SVF-doxygen/html/search/files_2.js +55 -55
- package/SVF-doxygen/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/search/files_4.js +5 -5
- package/SVF-doxygen/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/search/files_6.js +9 -9
- package/SVF-doxygen/html/search/files_7.js +14 -14
- package/SVF-doxygen/html/search/files_8.js +13 -13
- package/SVF-doxygen/html/search/files_9.js +18 -18
- package/SVF-doxygen/html/search/files_a.js +3 -3
- package/SVF-doxygen/html/search/files_b.js +2 -2
- package/SVF-doxygen/html/search/files_c.js +20 -20
- package/SVF-doxygen/html/search/files_d.js +4 -4
- package/SVF-doxygen/html/search/files_e.js +62 -62
- package/SVF-doxygen/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/search/functions_0.js +12 -12
- package/SVF-doxygen/html/search/functions_1.js +360 -360
- package/SVF-doxygen/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/search/functions_11.js +138 -138
- package/SVF-doxygen/html/search/functions_12.js +279 -279
- package/SVF-doxygen/html/search/functions_13.js +59 -59
- package/SVF-doxygen/html/search/functions_14.js +39 -39
- package/SVF-doxygen/html/search/functions_15.js +71 -71
- package/SVF-doxygen/html/search/functions_16.js +32 -32
- package/SVF-doxygen/html/search/functions_17.js +3 -3
- package/SVF-doxygen/html/search/functions_18.js +172 -172
- package/SVF-doxygen/html/search/functions_2.js +87 -87
- package/SVF-doxygen/html/search/functions_3.js +257 -257
- package/SVF-doxygen/html/search/functions_4.js +75 -75
- package/SVF-doxygen/html/search/functions_5.js +53 -53
- package/SVF-doxygen/html/search/functions_6.js +59 -59
- package/SVF-doxygen/html/search/functions_7.js +852 -852
- package/SVF-doxygen/html/search/functions_8.js +149 -149
- package/SVF-doxygen/html/search/functions_9.js +423 -428
- package/SVF-doxygen/html/search/functions_a.js +30 -30
- package/SVF-doxygen/html/search/functions_b.js +2 -2
- package/SVF-doxygen/html/search/functions_c.js +26 -26
- package/SVF-doxygen/html/search/functions_d.js +77 -77
- package/SVF-doxygen/html/search/functions_e.js +35 -35
- package/SVF-doxygen/html/search/functions_f.js +56 -56
- package/SVF-doxygen/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/search/namespaces_1.js +7 -7
- package/SVF-doxygen/html/search/related_0.js +2 -2
- package/SVF-doxygen/html/search/related_1.js +2 -2
- package/SVF-doxygen/html/search/related_2.js +2 -2
- package/SVF-doxygen/html/search/related_3.js +2 -2
- package/SVF-doxygen/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/search/related_5.js +1 -1
- package/SVF-doxygen/html/search/related_6.js +2 -2
- package/SVF-doxygen/html/search/related_7.js +4 -4
- package/SVF-doxygen/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/search/related_c.js +1 -1
- package/SVF-doxygen/html/search/related_d.js +12 -12
- package/SVF-doxygen/html/search/related_e.js +2 -2
- package/SVF-doxygen/html/search/related_f.js +2 -2
- package/SVF-doxygen/html/search/typedefs_0.js +19 -18
- package/SVF-doxygen/html/search/typedefs_1.js +26 -26
- package/SVF-doxygen/html/search/typedefs_10.js +61 -61
- package/SVF-doxygen/html/search/typedefs_11.js +13 -13
- package/SVF-doxygen/html/search/typedefs_12.js +11 -11
- package/SVF-doxygen/html/search/typedefs_13.js +33 -34
- package/SVF-doxygen/html/search/typedefs_14.js +8 -8
- package/SVF-doxygen/html/search/typedefs_2.js +129 -129
- package/SVF-doxygen/html/search/typedefs_3.js +39 -39
- package/SVF-doxygen/html/search/typedefs_4.js +17 -17
- package/SVF-doxygen/html/search/typedefs_5.js +41 -41
- package/SVF-doxygen/html/search/typedefs_6.js +55 -55
- package/SVF-doxygen/html/search/typedefs_7.js +44 -44
- package/SVF-doxygen/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/search/typedefs_9.js +6 -6
- package/SVF-doxygen/html/search/typedefs_a.js +29 -29
- package/SVF-doxygen/html/search/typedefs_b.js +29 -29
- package/SVF-doxygen/html/search/typedefs_c.js +41 -41
- package/SVF-doxygen/html/search/typedefs_d.js +14 -14
- package/SVF-doxygen/html/search/typedefs_e.js +52 -52
- package/SVF-doxygen/html/search/typedefs_f.js +14 -14
- package/SVF-doxygen/html/search/variables_0.js +151 -151
- package/SVF-doxygen/html/search/variables_1.js +75 -75
- package/SVF-doxygen/html/search/variables_10.js +97 -97
- package/SVF-doxygen/html/search/variables_11.js +44 -44
- package/SVF-doxygen/html/search/variables_12.js +92 -92
- package/SVF-doxygen/html/search/variables_13.js +75 -75
- package/SVF-doxygen/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/search/variables_15.js +48 -48
- package/SVF-doxygen/html/search/variables_16.js +9 -9
- package/SVF-doxygen/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/search/variables_18.js +2 -2
- package/SVF-doxygen/html/search/variables_2.js +38 -38
- package/SVF-doxygen/html/search/variables_3.js +142 -142
- package/SVF-doxygen/html/search/variables_4.js +55 -55
- package/SVF-doxygen/html/search/variables_5.js +37 -37
- package/SVF-doxygen/html/search/variables_6.js +66 -66
- package/SVF-doxygen/html/search/variables_7.js +33 -33
- package/SVF-doxygen/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/search/variables_9.js +78 -77
- package/SVF-doxygen/html/search/variables_a.js +4 -4
- package/SVF-doxygen/html/search/variables_b.js +10 -10
- package/SVF-doxygen/html/search/variables_c.js +45 -45
- package/SVF-doxygen/html/search/variables_d.js +56 -56
- package/SVF-doxygen/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/search/variables_f.js +29 -30
- package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1AccessPath_01_4.html +9 -9
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1ConsExeState_01_4.html +5 -5
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4.html +5 -5
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1IntervalExeState_01_4.html +5 -5
- package/SVF-doxygen/html/svf-ex_8cpp.html +17 -17
- package/SVF-doxygen/html/svf-ex_8cpp_source.html +17 -17
- package/package.json +1 -1
- package/svf/include/AbstractExecution/ConsExeState.h +99 -96
- package/svf/include/AbstractExecution/ExeState.h +66 -53
- package/svf/include/AbstractExecution/IntervalExeState.h +66 -61
- package/svf/include/AbstractExecution/SVFIR2ConsExeState.h +7 -7
- package/svf/include/AbstractExecution/SVFIR2ItvExeState.h +22 -19
- package/svf/include/MemoryModel/AccessPath.h +13 -11
- package/svf/include/SVFIR/SVFStatements.h +2 -3
- package/svf/lib/AbstractExecution/ConsExeState.cpp +13 -13
- package/svf/lib/AbstractExecution/ExeState.cpp +19 -19
- package/svf/lib/AbstractExecution/IntervalExeState.cpp +4 -4
- package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +38 -37
- package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +273 -287
- package/svf/lib/MemoryModel/AccessPath.cpp +39 -17
- package/svf/lib/SVFIR/SVFFileSystem.cpp +2 -2
|
@@ -49,9 +49,9 @@ class ExeState
|
|
|
49
49
|
|
|
50
50
|
public:
|
|
51
51
|
|
|
52
|
-
typedef AddressValue
|
|
53
|
-
typedef Map<u32_t,
|
|
54
|
-
/// Execution state
|
|
52
|
+
typedef AddressValue Addrs;
|
|
53
|
+
typedef Map<u32_t, Addrs> VarToAddrs;
|
|
54
|
+
/// Execution state type
|
|
55
55
|
enum ExeState_TYPE
|
|
56
56
|
{
|
|
57
57
|
IntervalK, SingleValueK
|
|
@@ -64,18 +64,18 @@ public:
|
|
|
64
64
|
|
|
65
65
|
virtual ~ExeState() = default;
|
|
66
66
|
|
|
67
|
-
ExeState(const ExeState &rhs) :
|
|
68
|
-
|
|
67
|
+
ExeState(const ExeState &rhs) : _varToAddrs(rhs._varToAddrs),
|
|
68
|
+
_locToAddrs(rhs._locToAddrs) {}
|
|
69
69
|
|
|
70
|
-
ExeState(ExeState &&rhs) noexcept:
|
|
71
|
-
|
|
70
|
+
ExeState(ExeState &&rhs) noexcept: _varToAddrs(std::move(rhs._varToAddrs)),
|
|
71
|
+
_locToAddrs(std::move(rhs._locToAddrs)) {}
|
|
72
72
|
|
|
73
73
|
ExeState &operator=(const ExeState &rhs)
|
|
74
74
|
{
|
|
75
75
|
if(*this != rhs)
|
|
76
76
|
{
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
_varToAddrs = rhs._varToAddrs;
|
|
78
|
+
_locToAddrs = rhs._locToAddrs;
|
|
79
79
|
}
|
|
80
80
|
return *this;
|
|
81
81
|
}
|
|
@@ -84,24 +84,49 @@ public:
|
|
|
84
84
|
{
|
|
85
85
|
if (this != &rhs)
|
|
86
86
|
{
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
_varToAddrs = std::move(rhs._varToAddrs);
|
|
88
|
+
_locToAddrs = std::move(rhs._locToAddrs);
|
|
89
89
|
}
|
|
90
90
|
return *this;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
virtual bool operator==(const ExeState &rhs) const;
|
|
94
93
|
|
|
95
|
-
|
|
94
|
+
protected:
|
|
95
|
+
VarToAddrs _varToAddrs{{0, getVirtualMemAddress(0)}}; ///< Map a variable (symbol) to its memory addresses
|
|
96
|
+
VarToAddrs _locToAddrs; ///< Map a memory address to its stored memory addresses
|
|
97
|
+
|
|
98
|
+
public:
|
|
99
|
+
|
|
100
|
+
/// get memory addresses of variable
|
|
101
|
+
virtual Addrs &getAddrs(u32_t id)
|
|
96
102
|
{
|
|
97
|
-
return
|
|
103
|
+
return _varToAddrs[id];
|
|
98
104
|
}
|
|
99
105
|
|
|
100
|
-
|
|
106
|
+
/// whether the variable is in varToAddrs table
|
|
107
|
+
inline virtual bool inVarToAddrsTable(u32_t id) const
|
|
101
108
|
{
|
|
102
|
-
return
|
|
109
|
+
return _varToAddrs.find(id) != _varToAddrs.end();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// whether the memory address stores memory addresses
|
|
113
|
+
inline virtual bool inLocToAddrsTable(u32_t id) const
|
|
114
|
+
{
|
|
115
|
+
return _locToAddrs.find(id) != _locToAddrs.end();
|
|
103
116
|
}
|
|
104
117
|
|
|
118
|
+
|
|
119
|
+
inline virtual const VarToAddrs &getVarToAddrs() const
|
|
120
|
+
{
|
|
121
|
+
return _varToAddrs;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
inline virtual const VarToAddrs &getLocToAddrs() const
|
|
125
|
+
{
|
|
126
|
+
return _locToAddrs;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
public:
|
|
105
130
|
/// Make all value join with the other
|
|
106
131
|
bool joinWith(const ExeState &other);
|
|
107
132
|
|
|
@@ -123,44 +148,22 @@ public:
|
|
|
123
148
|
return _kind;
|
|
124
149
|
}
|
|
125
150
|
|
|
126
|
-
inline virtual const VarToVAddrs &getVarToVAddrs() const
|
|
127
|
-
{
|
|
128
|
-
return _varToVAddrs;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
inline virtual const VarToVAddrs &getLocToVAddrs() const
|
|
132
|
-
{
|
|
133
|
-
return _locToVAddrs;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
inline virtual bool inVarToAddrsTable(u32_t id) const
|
|
137
|
-
{
|
|
138
|
-
return _varToVAddrs.find(id) != _varToVAddrs.end();
|
|
139
|
-
}
|
|
140
151
|
|
|
141
|
-
inline virtual bool inLocToAddrsTable(u32_t id) const
|
|
142
|
-
{
|
|
143
|
-
return _locToVAddrs.find(id) != _locToVAddrs.end();
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
virtual VAddrs &getVAddrs(u32_t id)
|
|
147
|
-
{
|
|
148
|
-
return _varToVAddrs[id];
|
|
149
|
-
}
|
|
150
152
|
|
|
151
|
-
|
|
153
|
+
public:
|
|
154
|
+
inline virtual void storeAddrs(u32_t addr, const Addrs &vaddrs)
|
|
152
155
|
{
|
|
153
156
|
assert(isVirtualMemAddress(addr) && "not virtual address?");
|
|
154
157
|
if(isNullPtr(addr)) return;
|
|
155
158
|
u32_t objId = getInternalID(addr);
|
|
156
|
-
|
|
159
|
+
_locToAddrs[objId] = vaddrs;
|
|
157
160
|
}
|
|
158
161
|
|
|
159
|
-
inline virtual
|
|
162
|
+
inline virtual Addrs &loadAddrs(u32_t addr)
|
|
160
163
|
{
|
|
161
164
|
assert(isVirtualMemAddress(addr) && "not virtual address?");
|
|
162
165
|
u32_t objId = getInternalID(addr);
|
|
163
|
-
return
|
|
166
|
+
return _locToAddrs[objId];
|
|
164
167
|
}
|
|
165
168
|
|
|
166
169
|
inline bool isNullPtr(u32_t addr)
|
|
@@ -168,13 +171,23 @@ public:
|
|
|
168
171
|
return getInternalID(addr) == 0;
|
|
169
172
|
}
|
|
170
173
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
+
public:
|
|
175
|
+
|
|
176
|
+
virtual bool operator==(const ExeState &rhs) const;
|
|
177
|
+
|
|
178
|
+
inline virtual bool operator!=(const ExeState &rhs) const
|
|
179
|
+
{
|
|
180
|
+
return !(*this == rhs);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
bool equals(const ExeState *other) const
|
|
184
|
+
{
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
174
187
|
|
|
175
188
|
protected:
|
|
176
189
|
|
|
177
|
-
static bool
|
|
190
|
+
static bool eqVarToAddrs(const VarToAddrs &lhs, const VarToAddrs &rhs)
|
|
178
191
|
{
|
|
179
192
|
if (lhs.size() != rhs.size()) return false;
|
|
180
193
|
for (const auto &item: lhs)
|
|
@@ -195,14 +208,14 @@ public:
|
|
|
195
208
|
virtual std::string varToAddrs(u32_t varId) const
|
|
196
209
|
{
|
|
197
210
|
std::stringstream exprName;
|
|
198
|
-
auto it =
|
|
199
|
-
if (it ==
|
|
211
|
+
auto it = _varToAddrs.find(varId);
|
|
212
|
+
if (it == _varToAddrs.end())
|
|
200
213
|
{
|
|
201
214
|
exprName << "Var not in varToAddrs!\n";
|
|
202
215
|
}
|
|
203
216
|
else
|
|
204
217
|
{
|
|
205
|
-
const
|
|
218
|
+
const Addrs &vaddrs = it->second;
|
|
206
219
|
if (vaddrs.size() == 1)
|
|
207
220
|
{
|
|
208
221
|
exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
|
|
@@ -223,14 +236,14 @@ public:
|
|
|
223
236
|
virtual std::string locToAddrs(u32_t objId) const
|
|
224
237
|
{
|
|
225
238
|
std::stringstream exprName;
|
|
226
|
-
auto it =
|
|
227
|
-
if (it ==
|
|
239
|
+
auto it = _locToAddrs.find(objId);
|
|
240
|
+
if (it == _locToAddrs.end())
|
|
228
241
|
{
|
|
229
242
|
exprName << "Var not in varToAddrs!\n";
|
|
230
243
|
}
|
|
231
244
|
else
|
|
232
245
|
{
|
|
233
|
-
const
|
|
246
|
+
const Addrs &vaddrs = it->second;
|
|
234
247
|
if (vaddrs.size() == 1)
|
|
235
248
|
{
|
|
236
249
|
exprName << "addr: {" << std::dec << getInternalID(*vaddrs.begin()) << "}\n";
|
|
@@ -63,18 +63,10 @@ public:
|
|
|
63
63
|
|
|
64
64
|
static IntervalExeState globalES;
|
|
65
65
|
|
|
66
|
-
protected:
|
|
67
|
-
/// key: nodeID value: Domain Value
|
|
68
|
-
VarToValMap _varToItvVal;
|
|
69
|
-
/// key: nodeID value: Domain Value
|
|
70
|
-
LocToValMap _locToItvVal;
|
|
71
|
-
|
|
72
|
-
|
|
73
66
|
public:
|
|
74
|
-
/// default constructor
|
|
67
|
+
/// default constructor
|
|
75
68
|
IntervalExeState() : ExeState(ExeState::IntervalK) {}
|
|
76
69
|
|
|
77
|
-
/// set path constraints, val2val and loc2val map
|
|
78
70
|
IntervalExeState(VarToValMap &_varToValMap, LocToValMap &_locToValMap) : ExeState(ExeState::IntervalK),
|
|
79
71
|
_varToItvVal(_varToValMap),
|
|
80
72
|
_locToItvVal(_locToValMap) {}
|
|
@@ -86,7 +78,9 @@ public:
|
|
|
86
78
|
|
|
87
79
|
}
|
|
88
80
|
|
|
89
|
-
|
|
81
|
+
virtual ~IntervalExeState() = default;
|
|
82
|
+
|
|
83
|
+
|
|
90
84
|
IntervalExeState &operator=(const IntervalExeState &rhs)
|
|
91
85
|
{
|
|
92
86
|
if (rhs != *this)
|
|
@@ -151,54 +145,63 @@ public:
|
|
|
151
145
|
return inv;
|
|
152
146
|
}
|
|
153
147
|
|
|
154
|
-
|
|
148
|
+
protected:
|
|
149
|
+
|
|
150
|
+
VarToValMap _varToItvVal; ///< Map a variable (symbol) to its interval value
|
|
151
|
+
LocToValMap _locToItvVal; ///< Map a memory address to its stored interval value
|
|
152
|
+
|
|
153
|
+
public:
|
|
154
|
+
|
|
155
|
+
/// get memory addresses of variable
|
|
156
|
+
Addrs &getAddrs(u32_t id) override
|
|
155
157
|
{
|
|
156
|
-
auto it =
|
|
157
|
-
if (it !=
|
|
158
|
+
auto it = _varToAddrs.find(id);
|
|
159
|
+
if (it != _varToAddrs.end())
|
|
158
160
|
return it->second;
|
|
159
161
|
else
|
|
160
|
-
return globalES.
|
|
162
|
+
return globalES._varToAddrs[id];
|
|
161
163
|
}
|
|
162
164
|
|
|
163
|
-
|
|
165
|
+
/// get interval value of variable
|
|
166
|
+
inline IntervalValue &operator[](u32_t varId)
|
|
164
167
|
{
|
|
165
|
-
|
|
166
|
-
|
|
168
|
+
auto localIt = _varToItvVal.find(varId);
|
|
169
|
+
if(localIt != _varToItvVal.end())
|
|
170
|
+
return localIt->second;
|
|
171
|
+
else
|
|
172
|
+
{
|
|
173
|
+
return globalES._varToItvVal[varId];
|
|
174
|
+
}
|
|
167
175
|
}
|
|
168
176
|
|
|
177
|
+
/// whether the variable is in varToAddrs table
|
|
169
178
|
inline bool inVarToAddrsTable(u32_t id) const override
|
|
170
179
|
{
|
|
171
|
-
return
|
|
172
|
-
globalES.
|
|
180
|
+
return _varToAddrs.find(id) != _varToAddrs.end() ||
|
|
181
|
+
globalES._varToAddrs.find(id) != globalES._varToAddrs.end();
|
|
173
182
|
}
|
|
174
183
|
|
|
175
|
-
|
|
184
|
+
/// whether the variable is in varToVal table
|
|
185
|
+
inline bool inVarToValTable(u32_t id) const
|
|
176
186
|
{
|
|
177
|
-
return
|
|
178
|
-
globalES.
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
inline bool inLocalLocToIValTable(u32_t id) const
|
|
182
|
-
{
|
|
183
|
-
return _locToItvVal.find(id) != _locToItvVal.end();
|
|
187
|
+
return _varToItvVal.find(id) != _varToItvVal.end() ||
|
|
188
|
+
globalES._varToItvVal.find(id) != globalES._varToItvVal.end();
|
|
184
189
|
}
|
|
185
190
|
|
|
191
|
+
/// whether the memory address stores memory addresses
|
|
186
192
|
inline bool inLocToAddrsTable(u32_t id) const override
|
|
187
193
|
{
|
|
188
|
-
return
|
|
189
|
-
globalES.
|
|
194
|
+
return _locToAddrs.find(id) != _locToAddrs.end() ||
|
|
195
|
+
globalES._locToAddrs.find(id) != globalES._locToAddrs.end();
|
|
190
196
|
}
|
|
191
197
|
|
|
192
|
-
|
|
198
|
+
/// whether the memory address stores interval value
|
|
199
|
+
inline bool inLocToValTable(u32_t id) const
|
|
193
200
|
{
|
|
194
|
-
return
|
|
201
|
+
return _locToItvVal.find(id) != _locToItvVal.end() ||
|
|
202
|
+
globalES._locToItvVal.find(id) != globalES._locToItvVal.end();
|
|
195
203
|
}
|
|
196
204
|
|
|
197
|
-
bool equals(const IntervalExeState &other) const;
|
|
198
|
-
|
|
199
|
-
virtual ~IntervalExeState() = default;
|
|
200
|
-
|
|
201
|
-
|
|
202
205
|
/// get var2val map
|
|
203
206
|
const VarToValMap &getVarToVal() const
|
|
204
207
|
{
|
|
@@ -211,18 +214,18 @@ public:
|
|
|
211
214
|
return _locToItvVal;
|
|
212
215
|
}
|
|
213
216
|
|
|
214
|
-
|
|
215
|
-
inline IntervalValue &operator[](u32_t varId)
|
|
217
|
+
inline bool inLocalLocToValTable(u32_t id) const
|
|
216
218
|
{
|
|
217
|
-
|
|
218
|
-
if(localIt != _varToItvVal.end())
|
|
219
|
-
return localIt->second;
|
|
220
|
-
else
|
|
221
|
-
{
|
|
222
|
-
return globalES._varToItvVal[varId];
|
|
223
|
-
}
|
|
219
|
+
return _locToItvVal.find(id) != _locToItvVal.end();
|
|
224
220
|
}
|
|
225
221
|
|
|
222
|
+
inline bool inLocalLocToAddrsTable(u32_t id) const
|
|
223
|
+
{
|
|
224
|
+
return _locToAddrs.find(id) != _locToAddrs.end();
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
public:
|
|
228
|
+
|
|
226
229
|
inline void cpyItvToLocal(u32_t varId)
|
|
227
230
|
{
|
|
228
231
|
auto localIt = _varToItvVal.find(varId);
|
|
@@ -319,24 +322,24 @@ public:
|
|
|
319
322
|
}
|
|
320
323
|
}
|
|
321
324
|
|
|
322
|
-
inline
|
|
325
|
+
inline Addrs &loadAddrs(u32_t addr) override
|
|
323
326
|
{
|
|
324
327
|
assert(isVirtualMemAddress(addr) && "not virtual address?");
|
|
325
328
|
u32_t objId = getInternalID(addr);
|
|
326
|
-
auto it =
|
|
327
|
-
if(it !=
|
|
329
|
+
auto it = _locToAddrs.find(objId);
|
|
330
|
+
if(it != _locToAddrs.end())
|
|
328
331
|
return it->second;
|
|
329
332
|
else
|
|
330
333
|
{
|
|
331
|
-
auto globIt = globalES.
|
|
332
|
-
if(globIt != globalES.
|
|
334
|
+
auto globIt = globalES._locToAddrs.find(objId);
|
|
335
|
+
if(globIt != globalES._locToAddrs.end())
|
|
333
336
|
return globIt->second;
|
|
334
337
|
else
|
|
335
|
-
return
|
|
338
|
+
return _locToAddrs[objId];
|
|
336
339
|
}
|
|
337
340
|
}
|
|
338
341
|
|
|
339
|
-
inline IntervalValue&
|
|
342
|
+
inline IntervalValue& getLocToVal(u32_t id)
|
|
340
343
|
{
|
|
341
344
|
auto it = _locToItvVal.find(id);
|
|
342
345
|
if(it != _locToItvVal.end())
|
|
@@ -351,18 +354,18 @@ public:
|
|
|
351
354
|
}
|
|
352
355
|
}
|
|
353
356
|
|
|
354
|
-
inline
|
|
357
|
+
inline Addrs& getLocAddrs(u32_t id)
|
|
355
358
|
{
|
|
356
|
-
auto it =
|
|
357
|
-
if(it !=
|
|
359
|
+
auto it = _locToAddrs.find(id);
|
|
360
|
+
if(it != _locToAddrs.end())
|
|
358
361
|
return it->second;
|
|
359
362
|
else
|
|
360
363
|
{
|
|
361
|
-
auto globIt = globalES.
|
|
362
|
-
if(globIt != globalES.
|
|
364
|
+
auto globIt = globalES._locToAddrs.find(id);
|
|
365
|
+
if(globIt != globalES._locToAddrs.end())
|
|
363
366
|
return globIt->second;
|
|
364
367
|
else
|
|
365
|
-
return
|
|
368
|
+
return _locToAddrs[id];
|
|
366
369
|
}
|
|
367
370
|
}
|
|
368
371
|
|
|
@@ -374,6 +377,8 @@ public:
|
|
|
374
377
|
return "";
|
|
375
378
|
}
|
|
376
379
|
|
|
380
|
+
bool equals(const IntervalExeState &other) const;
|
|
381
|
+
|
|
377
382
|
static bool eqVarToValMap(const VarToValMap &lhs, const VarToValMap &rhs)
|
|
378
383
|
{
|
|
379
384
|
if (lhs.size() != rhs.size()) return false;
|
|
@@ -446,15 +451,15 @@ public:
|
|
|
446
451
|
{
|
|
447
452
|
_locToItvVal.clear();
|
|
448
453
|
_varToItvVal.clear();
|
|
449
|
-
|
|
450
|
-
|
|
454
|
+
_locToAddrs.clear();
|
|
455
|
+
_varToAddrs.clear();
|
|
451
456
|
}
|
|
452
457
|
|
|
453
458
|
|
|
454
459
|
private:
|
|
455
460
|
void printTable(const VarToValMap &table, std::ostream &oss) const;
|
|
456
461
|
|
|
457
|
-
void printTable(const
|
|
462
|
+
void printTable(const VarToAddrs &table, std::ostream &oss) const;
|
|
458
463
|
};
|
|
459
464
|
}
|
|
460
465
|
|
|
@@ -35,7 +35,7 @@ namespace SVF
|
|
|
35
35
|
class SVFIR2ConsExeState
|
|
36
36
|
{
|
|
37
37
|
public:
|
|
38
|
-
typedef ExeState::
|
|
38
|
+
typedef ExeState::Addrs Addrs;
|
|
39
39
|
|
|
40
40
|
SVFIR2ConsExeState() = default;
|
|
41
41
|
|
|
@@ -89,7 +89,7 @@ public:
|
|
|
89
89
|
//%}
|
|
90
90
|
|
|
91
91
|
/// Return the expr of gep object given a base and offset
|
|
92
|
-
|
|
92
|
+
Addrs getGepObjAddress(u32_t base, s32_t offset);
|
|
93
93
|
|
|
94
94
|
/// Return the offset expression of a GepStmt
|
|
95
95
|
std::pair<s32_t, s32_t> getGepOffset(const GepStmt *gep);
|
|
@@ -123,17 +123,17 @@ public:
|
|
|
123
123
|
|
|
124
124
|
inline bool inVarToValTable(u32_t id) const
|
|
125
125
|
{
|
|
126
|
-
return _es->
|
|
126
|
+
return _es->inVarToValTable(id);
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
inline bool
|
|
129
|
+
inline bool inVarToAddrsTable(u32_t id) const
|
|
130
130
|
{
|
|
131
|
-
return _es->
|
|
131
|
+
return _es->inVarToAddrsTable(id);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
inline bool
|
|
134
|
+
inline bool inLocToValTable(u32_t id) const
|
|
135
135
|
{
|
|
136
|
-
return _es->
|
|
136
|
+
return _es->inLocToValTable(id);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
inline bool inLocToAddrsTable(u32_t id) const
|
|
@@ -41,8 +41,8 @@ namespace SVF
|
|
|
41
41
|
class SVFIR2ItvExeState
|
|
42
42
|
{
|
|
43
43
|
public:
|
|
44
|
-
typedef ExeState::
|
|
45
|
-
static
|
|
44
|
+
typedef ExeState::Addrs Addrs;
|
|
45
|
+
static Addrs globalNulladdrs;
|
|
46
46
|
public:
|
|
47
47
|
SVFIR2ItvExeState(SVFIR *ir) : _svfir(ir) {}
|
|
48
48
|
|
|
@@ -66,18 +66,15 @@ public:
|
|
|
66
66
|
return _relEs;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
void
|
|
69
|
+
void widenAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
|
|
70
70
|
|
|
71
|
-
void
|
|
71
|
+
void narrowAddrs(IntervalExeState &lhs, const IntervalExeState &rhs);
|
|
72
72
|
|
|
73
73
|
/// Return the field address given a pointer points to a struct object and an offset
|
|
74
|
-
|
|
74
|
+
Addrs getGepObjAddress(u32_t pointer, APOffset offset);
|
|
75
75
|
|
|
76
|
-
/// Return the
|
|
77
|
-
IntervalValue
|
|
78
|
-
|
|
79
|
-
/// Return the Index offset from one gep param offset
|
|
80
|
-
IntervalValue getItvOfFlattenedElemIndexFromGepTypePair(const AccessPath::IdxVarAndGepTypePair& gep_pair, const GepStmt *gep);
|
|
76
|
+
/// Return the value range of Integer SVF Type, e.g. unsigned i8 Type->[0, 255], signed i8 Type->[-128, 127]
|
|
77
|
+
IntervalValue getRangeLimitFromType(const SVFType* type);
|
|
81
78
|
|
|
82
79
|
/// Return the byte offset expression of a GepStmt
|
|
83
80
|
/// elemBytesize is the element byte size of an static alloc or heap alloc array
|
|
@@ -106,29 +103,35 @@ public:
|
|
|
106
103
|
/// Init SVFVar
|
|
107
104
|
void initSVFVar(u32_t varId);
|
|
108
105
|
|
|
109
|
-
inline
|
|
106
|
+
inline Addrs &getAddrs(u32_t id)
|
|
110
107
|
{
|
|
111
108
|
if (inVarToAddrsTable(id))
|
|
112
|
-
return _es.
|
|
109
|
+
return _es.getAddrs(id);
|
|
113
110
|
else
|
|
114
|
-
return
|
|
111
|
+
return globalNulladdrs;
|
|
115
112
|
}
|
|
116
113
|
|
|
117
|
-
inline bool inVarToIValTable(u32_t id) const
|
|
118
|
-
{
|
|
119
|
-
return _es.inVarToIValTable(id);
|
|
120
|
-
}
|
|
121
114
|
|
|
122
|
-
|
|
115
|
+
/// whether the variable is in varToVal table
|
|
116
|
+
inline bool inVarToValTable(u32_t id) const
|
|
123
117
|
{
|
|
124
|
-
return _es.
|
|
118
|
+
return _es.inVarToValTable(id);
|
|
125
119
|
}
|
|
126
120
|
|
|
121
|
+
/// whether the variable is in varToAddrs table
|
|
127
122
|
inline bool inVarToAddrsTable(u32_t id) const
|
|
128
123
|
{
|
|
129
124
|
return _es.inVarToAddrsTable(id);
|
|
130
125
|
}
|
|
131
126
|
|
|
127
|
+
|
|
128
|
+
/// whether the memory address stores a interval value
|
|
129
|
+
inline bool inLocToValTable(u32_t id) const
|
|
130
|
+
{
|
|
131
|
+
return _es.inLocToValTable(id);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/// whether the memory address stores memory addresses
|
|
132
135
|
inline bool inLocToAddrsTable(u32_t id) const
|
|
133
136
|
{
|
|
134
137
|
return _es.inLocToAddrsTable(id);
|
|
@@ -61,8 +61,8 @@ public:
|
|
|
61
61
|
NonOverlap, Overlap, Subset, Superset, Same
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
typedef std::pair<const SVFVar*, const SVFType*>
|
|
65
|
-
typedef std::vector<
|
|
64
|
+
typedef std::pair<const SVFVar*, const SVFType*> IdxOperandPair;
|
|
65
|
+
typedef std::vector<IdxOperandPair> IdxOperandPairs;
|
|
66
66
|
|
|
67
67
|
/// Constructor
|
|
68
68
|
AccessPath(APOffset o = 0) : fldIdx(o) {}
|
|
@@ -70,7 +70,7 @@ public:
|
|
|
70
70
|
/// Copy Constructor
|
|
71
71
|
AccessPath(const AccessPath& ap)
|
|
72
72
|
: fldIdx(ap.fldIdx),
|
|
73
|
-
|
|
73
|
+
idxOperandPairs(ap.getIdxOperandPairVec())
|
|
74
74
|
{
|
|
75
75
|
}
|
|
76
76
|
|
|
@@ -83,13 +83,13 @@ public:
|
|
|
83
83
|
inline const AccessPath& operator=(const AccessPath& rhs)
|
|
84
84
|
{
|
|
85
85
|
fldIdx = rhs.fldIdx;
|
|
86
|
-
|
|
86
|
+
idxOperandPairs = rhs.getIdxOperandPairVec();
|
|
87
87
|
return *this;
|
|
88
88
|
}
|
|
89
89
|
inline bool operator==(const AccessPath& rhs) const
|
|
90
90
|
{
|
|
91
91
|
return this->fldIdx == rhs.fldIdx &&
|
|
92
|
-
this->
|
|
92
|
+
this->idxOperandPairs == rhs.idxOperandPairs;
|
|
93
93
|
}
|
|
94
94
|
//@}
|
|
95
95
|
|
|
@@ -103,9 +103,9 @@ public:
|
|
|
103
103
|
{
|
|
104
104
|
fldIdx = idx;
|
|
105
105
|
}
|
|
106
|
-
inline const
|
|
106
|
+
inline const IdxOperandPairs& getIdxOperandPairVec() const
|
|
107
107
|
{
|
|
108
|
-
return
|
|
108
|
+
return idxOperandPairs;
|
|
109
109
|
}
|
|
110
110
|
//@}
|
|
111
111
|
|
|
@@ -151,6 +151,9 @@ public:
|
|
|
151
151
|
return computeAllLocations().intersects(RHS.computeAllLocations());
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
/// Return byte offset from the beginning of the structure to the field where it is located for struct type
|
|
155
|
+
u32_t getStructFieldOffset(const SVFVar* idxOperandVar, const SVFStructType* idxOperandType) const;
|
|
156
|
+
|
|
154
157
|
/// Dump location set
|
|
155
158
|
std::string dump() const;
|
|
156
159
|
|
|
@@ -163,8 +166,7 @@ private:
|
|
|
163
166
|
NodeBS computeAllLocations() const;
|
|
164
167
|
|
|
165
168
|
APOffset fldIdx; ///< Accumulated Constant Offsets
|
|
166
|
-
|
|
167
|
-
offsetVarAndGepTypePairs; ///< a vector of actual offset in the form of <SVF Var, iterator type>s
|
|
169
|
+
IdxOperandPairs idxOperandPairs; ///< a vector of actual offset in the form of <SVF Var, iterator type>
|
|
168
170
|
};
|
|
169
171
|
|
|
170
172
|
} // End namespace SVF
|
|
@@ -174,9 +176,9 @@ template <> struct std::hash<SVF::AccessPath>
|
|
|
174
176
|
size_t operator()(const SVF::AccessPath &ap) const
|
|
175
177
|
{
|
|
176
178
|
SVF::Hash<std::pair<SVF::NodeID, SVF::NodeID>> h;
|
|
177
|
-
std::hash<SVF::AccessPath::
|
|
179
|
+
std::hash<SVF::AccessPath::IdxOperandPairs> v;
|
|
178
180
|
return h(std::make_pair(ap.getConstantFieldIdx(),
|
|
179
|
-
v(ap.
|
|
181
|
+
v(ap.getIdxOperandPairVec())));
|
|
180
182
|
}
|
|
181
183
|
};
|
|
182
184
|
|
|
@@ -492,10 +492,9 @@ public:
|
|
|
492
492
|
{
|
|
493
493
|
return ap;
|
|
494
494
|
}
|
|
495
|
-
inline const AccessPath::
|
|
496
|
-
getOffsetVarAndGepTypePairVec() const
|
|
495
|
+
inline const AccessPath::IdxOperandPairs getOffsetVarAndGepTypePairVec() const
|
|
497
496
|
{
|
|
498
|
-
return getAccessPath().
|
|
497
|
+
return getAccessPath().getIdxOperandPairVec();
|
|
499
498
|
}
|
|
500
499
|
/// Return TRUE if this is a constant location set.
|
|
501
500
|
inline bool isConstantOffset() const
|