svf-tools 1.0.849 → 1.0.850
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/IntervalExeState_8cpp_source.html +293 -217
- package/SVF-doxygen/html/IntervalExeState_8h.html +2 -0
- package/SVF-doxygen/html/IntervalExeState_8h_source.html +622 -435
- package/SVF-doxygen/html/RelationSolver_8cpp_source.html +60 -60
- package/SVF-doxygen/html/RelationSolver_8h_source.html +16 -16
- package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +10 -10
- package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +8 -8
- package/SVF-doxygen/html/annotated.html +215 -214
- package/SVF-doxygen/html/classSVF_1_1ExeState.html +9 -8
- package/SVF-doxygen/html/classSVF_1_1ExeState.png +0 -0
- package/SVF-doxygen/html/classSVF_1_1IntervalESBase-members.html +168 -0
- package/SVF-doxygen/html/classSVF_1_1IntervalESBase.html +2331 -0
- package/SVF-doxygen/html/classSVF_1_1IntervalESBase.png +0 -0
- package/SVF-doxygen/html/classSVF_1_1IntervalExeState-members.html +79 -62
- package/SVF-doxygen/html/classSVF_1_1IntervalExeState.html +497 -1381
- package/SVF-doxygen/html/classSVF_1_1IntervalExeState.png +0 -0
- package/SVF-doxygen/html/classSVF_1_1RelationSolver-members.html +8 -8
- package/SVF-doxygen/html/classSVF_1_1RelationSolver.html +100 -100
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +29 -29
- package/SVF-doxygen/html/classes.html +232 -231
- package/SVF-doxygen/html/functions.html +2 -2
- package/SVF-doxygen/html/functions_a.html +1 -1
- package/SVF-doxygen/html/functions_b.html +4 -4
- package/SVF-doxygen/html/functions_c.html +2 -2
- package/SVF-doxygen/html/functions_e.html +4 -3
- package/SVF-doxygen/html/functions_f.html +3 -3
- package/SVF-doxygen/html/functions_func.html +1 -1
- package/SVF-doxygen/html/functions_func_b.html +4 -4
- package/SVF-doxygen/html/functions_func_c.html +2 -2
- package/SVF-doxygen/html/functions_func_e.html +3 -2
- package/SVF-doxygen/html/functions_func_g.html +27 -24
- package/SVF-doxygen/html/functions_func_h.html +4 -3
- package/SVF-doxygen/html/functions_func_i.html +16 -9
- package/SVF-doxygen/html/functions_func_j.html +1 -0
- package/SVF-doxygen/html/functions_func_l.html +6 -4
- package/SVF-doxygen/html/functions_func_m.html +1 -0
- package/SVF-doxygen/html/functions_func_n.html +6 -4
- package/SVF-doxygen/html/functions_func_o.html +17 -11
- package/SVF-doxygen/html/functions_func_p.html +3 -3
- package/SVF-doxygen/html/functions_func_r.html +1 -1
- package/SVF-doxygen/html/functions_func_s.html +2 -2
- package/SVF-doxygen/html/functions_func_t.html +2 -2
- package/SVF-doxygen/html/functions_func_w.html +4 -2
- package/SVF-doxygen/html/functions_func_~.html +3 -0
- package/SVF-doxygen/html/functions_g.html +24 -21
- package/SVF-doxygen/html/functions_h.html +6 -5
- package/SVF-doxygen/html/functions_i.html +21 -14
- package/SVF-doxygen/html/functions_j.html +1 -0
- package/SVF-doxygen/html/functions_l.html +10 -8
- package/SVF-doxygen/html/functions_m.html +1 -0
- package/SVF-doxygen/html/functions_n.html +5 -3
- package/SVF-doxygen/html/functions_o.html +18 -12
- package/SVF-doxygen/html/functions_p.html +17 -13
- package/SVF-doxygen/html/functions_r.html +7 -8
- package/SVF-doxygen/html/functions_rela_r.html +2 -1
- package/SVF-doxygen/html/functions_rela_s.html +1 -0
- package/SVF-doxygen/html/functions_s.html +15 -14
- package/SVF-doxygen/html/functions_t.html +5 -5
- package/SVF-doxygen/html/functions_type_l.html +1 -1
- package/SVF-doxygen/html/functions_type_v.html +1 -1
- package/SVF-doxygen/html/functions_v.html +7 -5
- package/SVF-doxygen/html/functions_vars.html +2 -2
- package/SVF-doxygen/html/functions_w.html +13 -9
- package/SVF-doxygen/html/functions_~.html +3 -0
- package/SVF-doxygen/html/hierarchy.html +2 -1
- package/SVF-doxygen/html/namespaceSVF.html +2 -0
- package/SVF-doxygen/html/search/all_0.js +2 -2
- package/SVF-doxygen/html/search/all_1.js +1 -1
- package/SVF-doxygen/html/search/all_10.js +325 -325
- package/SVF-doxygen/html/search/all_11.js +224 -224
- package/SVF-doxygen/html/search/all_12.js +552 -552
- package/SVF-doxygen/html/search/all_13.js +190 -190
- package/SVF-doxygen/html/search/all_14.js +67 -67
- package/SVF-doxygen/html/search/all_15.js +168 -168
- 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 +174 -173
- package/SVF-doxygen/html/search/all_2.js +4 -4
- package/SVF-doxygen/html/search/all_3.js +2 -2
- package/SVF-doxygen/html/search/all_5.js +2 -2
- package/SVF-doxygen/html/search/all_6.js +1 -1
- package/SVF-doxygen/html/search/all_7.js +6 -6
- package/SVF-doxygen/html/search/all_8.js +2 -2
- package/SVF-doxygen/html/search/all_9.js +406 -405
- 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 +115 -115
- package/SVF-doxygen/html/search/all_d.js +197 -197
- package/SVF-doxygen/html/search/all_e.js +207 -207
- package/SVF-doxygen/html/search/all_f.js +116 -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 +81 -81
- 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 +34 -34
- package/SVF-doxygen/html/search/classes_8.js +57 -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 +20 -20
- 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 +8 -8
- 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 +57 -57
- 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 +13 -13
- package/SVF-doxygen/html/search/functions_1.js +362 -362
- package/SVF-doxygen/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/search/functions_11.js +139 -139
- package/SVF-doxygen/html/search/functions_12.js +288 -288
- 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 +174 -173
- package/SVF-doxygen/html/search/functions_2.js +89 -89
- package/SVF-doxygen/html/search/functions_3.js +261 -261
- package/SVF-doxygen/html/search/functions_4.js +78 -78
- package/SVF-doxygen/html/search/functions_5.js +53 -53
- package/SVF-doxygen/html/search/functions_6.js +60 -60
- package/SVF-doxygen/html/search/functions_7.js +855 -855
- package/SVF-doxygen/html/search/functions_8.js +148 -148
- package/SVF-doxygen/html/search/functions_9.js +421 -420
- 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 +25 -25
- package/SVF-doxygen/html/search/functions_d.js +79 -79
- 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 +3 -3
- 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 +2 -2
- 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 -19
- package/SVF-doxygen/html/search/typedefs_1.js +26 -26
- package/SVF-doxygen/html/search/typedefs_10.js +62 -62
- 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 -33
- 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 +56 -56
- 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 +98 -98
- package/SVF-doxygen/html/search/variables_11.js +45 -45
- package/SVF-doxygen/html/search/variables_12.js +90 -90
- package/SVF-doxygen/html/search/variables_13.js +74 -74
- package/SVF-doxygen/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/search/variables_15.js +49 -49
- 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 +50 -50
- 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 +34 -34
- package/SVF-doxygen/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/search/variables_9.js +78 -78
- 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 +55 -55
- package/SVF-doxygen/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/search/variables_f.js +30 -30
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1IntervalExeState_01_4.html +6 -6
- package/package.json +1 -1
- package/svf/include/AbstractExecution/IntervalExeState.h +274 -102
- package/svf/include/AbstractExecution/RelationSolver.h +9 -9
- package/svf/lib/AbstractExecution/IntervalExeState.cpp +85 -14
- package/svf/lib/AbstractExecution/RelationSolver.cpp +22 -22
|
@@ -33,13 +33,12 @@
|
|
|
33
33
|
using namespace SVF;
|
|
34
34
|
using namespace SVFUtil;
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
bool IntervalExeState::equals(const IntervalExeState &other) const
|
|
36
|
+
bool IntervalESBase::equals(const IntervalESBase &other) const
|
|
38
37
|
{
|
|
39
38
|
return *this == other;
|
|
40
39
|
}
|
|
41
40
|
|
|
42
|
-
u32_t
|
|
41
|
+
u32_t IntervalESBase::hash() const
|
|
43
42
|
{
|
|
44
43
|
size_t h = getVarToVal().size() * 2;
|
|
45
44
|
Hash<u32_t> hf;
|
|
@@ -56,9 +55,9 @@ u32_t IntervalExeState::hash() const
|
|
|
56
55
|
return pairH(std::make_pair(std::make_pair(h, h2), (u32_t) ExeState::hash()));
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
|
|
58
|
+
IntervalESBase IntervalESBase::widening(const IntervalESBase& other)
|
|
60
59
|
{
|
|
61
|
-
|
|
60
|
+
IntervalESBase es = *this;
|
|
62
61
|
for (auto it = es._varToItvVal.begin(); it != es._varToItvVal.end(); ++it)
|
|
63
62
|
{
|
|
64
63
|
auto key = it->first;
|
|
@@ -74,9 +73,9 @@ IntervalExeState IntervalExeState::widening(const IntervalExeState& other)
|
|
|
74
73
|
return es;
|
|
75
74
|
}
|
|
76
75
|
|
|
77
|
-
|
|
76
|
+
IntervalESBase IntervalESBase::narrowing(const IntervalESBase& other)
|
|
78
77
|
{
|
|
79
|
-
|
|
78
|
+
IntervalESBase es = *this;
|
|
80
79
|
for (auto it = es._varToItvVal.begin(); it != es._varToItvVal.end(); ++it)
|
|
81
80
|
{
|
|
82
81
|
auto key = it->first;
|
|
@@ -94,7 +93,7 @@ IntervalExeState IntervalExeState::narrowing(const IntervalExeState& other)
|
|
|
94
93
|
}
|
|
95
94
|
|
|
96
95
|
/// domain widen with other, important! other widen this.
|
|
97
|
-
void
|
|
96
|
+
void IntervalESBase::widenWith(const IntervalESBase& other)
|
|
98
97
|
{
|
|
99
98
|
for (auto it = _varToItvVal.begin(); it != _varToItvVal.end(); ++it)
|
|
100
99
|
{
|
|
@@ -111,7 +110,7 @@ void IntervalExeState::widenWith(const IntervalExeState& other)
|
|
|
111
110
|
}
|
|
112
111
|
|
|
113
112
|
/// domain join with other, important! other widen this.
|
|
114
|
-
void
|
|
113
|
+
void IntervalESBase::joinWith(const IntervalESBase& other)
|
|
115
114
|
{
|
|
116
115
|
ExeState::joinWith(other);
|
|
117
116
|
for (auto it = other._varToItvVal.begin(); it != other._varToItvVal.end(); ++it)
|
|
@@ -143,7 +142,7 @@ void IntervalExeState::joinWith(const IntervalExeState& other)
|
|
|
143
142
|
}
|
|
144
143
|
|
|
145
144
|
/// domain narrow with other, important! other widen this.
|
|
146
|
-
void
|
|
145
|
+
void IntervalESBase::narrowWith(const IntervalESBase& other)
|
|
147
146
|
{
|
|
148
147
|
for (auto it = _varToItvVal.begin(); it != _varToItvVal.end(); ++it)
|
|
149
148
|
{
|
|
@@ -162,7 +161,7 @@ void IntervalExeState::narrowWith(const IntervalExeState& other)
|
|
|
162
161
|
}
|
|
163
162
|
|
|
164
163
|
/// domain meet with other, important! other widen this.
|
|
165
|
-
void
|
|
164
|
+
void IntervalESBase::meetWith(const IntervalESBase& other)
|
|
166
165
|
{
|
|
167
166
|
ExeState::meetWith(other);
|
|
168
167
|
for (auto it = other._varToItvVal.begin(); it != other._varToItvVal.end(); ++it)
|
|
@@ -186,7 +185,7 @@ void IntervalExeState::meetWith(const IntervalExeState& other)
|
|
|
186
185
|
}
|
|
187
186
|
|
|
188
187
|
/// Print values of all expressions
|
|
189
|
-
void
|
|
188
|
+
void IntervalESBase::printExprValues(std::ostream &oss) const
|
|
190
189
|
{
|
|
191
190
|
oss << "-----------Var and Value-----------\n";
|
|
192
191
|
printTable(_varToItvVal, oss);
|
|
@@ -196,7 +195,7 @@ void IntervalExeState::printExprValues(std::ostream &oss) const
|
|
|
196
195
|
oss << "-----------------------------------------\n";
|
|
197
196
|
}
|
|
198
197
|
|
|
199
|
-
void
|
|
198
|
+
void IntervalESBase::printTable(const VarToValMap &table, std::ostream &oss) const
|
|
200
199
|
{
|
|
201
200
|
oss.flags(std::ios::left);
|
|
202
201
|
std::set<NodeID> ordered;
|
|
@@ -219,7 +218,7 @@ void IntervalExeState::printTable(const VarToValMap &table, std::ostream &oss) c
|
|
|
219
218
|
}
|
|
220
219
|
}
|
|
221
220
|
|
|
222
|
-
void
|
|
221
|
+
void IntervalESBase::printTable(const VarToAddrs &table, std::ostream &oss) const
|
|
223
222
|
{
|
|
224
223
|
oss.flags(std::ios::left);
|
|
225
224
|
std::set<NodeID> ordered;
|
|
@@ -239,3 +238,75 @@ void IntervalExeState::printTable(const VarToAddrs &table, std::ostream &oss) co
|
|
|
239
238
|
oss << "]\n";
|
|
240
239
|
}
|
|
241
240
|
}
|
|
241
|
+
|
|
242
|
+
IntervalExeState IntervalExeState::globalES;
|
|
243
|
+
bool IntervalExeState::equals(const IntervalExeState &other) const
|
|
244
|
+
{
|
|
245
|
+
return *this == other;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
u32_t IntervalExeState::hash() const
|
|
249
|
+
{
|
|
250
|
+
return IntervalESBase::hash();
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
IntervalExeState IntervalExeState::widening(const IntervalExeState& other)
|
|
254
|
+
{
|
|
255
|
+
IntervalExeState es = *this;
|
|
256
|
+
for (auto it = es._varToItvVal.begin(); it != es._varToItvVal.end(); ++it)
|
|
257
|
+
{
|
|
258
|
+
auto key = it->first;
|
|
259
|
+
if (other._varToItvVal.find(key) != other._varToItvVal.end())
|
|
260
|
+
it->second.widen_with(other._varToItvVal.at(key));
|
|
261
|
+
}
|
|
262
|
+
for (auto it = es._locToItvVal.begin(); it != es._locToItvVal.end(); ++it)
|
|
263
|
+
{
|
|
264
|
+
auto key = it->first;
|
|
265
|
+
if (other._locToItvVal.find(key) != other._locToItvVal.end())
|
|
266
|
+
it->second.widen_with(other._locToItvVal.at(key));
|
|
267
|
+
}
|
|
268
|
+
return es;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
IntervalExeState IntervalExeState::narrowing(const IntervalExeState& other)
|
|
272
|
+
{
|
|
273
|
+
IntervalExeState es = *this;
|
|
274
|
+
for (auto it = es._varToItvVal.begin(); it != es._varToItvVal.end(); ++it)
|
|
275
|
+
{
|
|
276
|
+
auto key = it->first;
|
|
277
|
+
if (other._varToItvVal.find(key) != other._varToItvVal.end())
|
|
278
|
+
it->second.narrow_with(other._varToItvVal.at(key));
|
|
279
|
+
}
|
|
280
|
+
for (auto it = es._locToItvVal.begin(); it != es._locToItvVal.end(); ++it)
|
|
281
|
+
{
|
|
282
|
+
auto key = it->first;
|
|
283
|
+
if (other._locToItvVal.find(key) != other._locToItvVal.end())
|
|
284
|
+
it->second.narrow_with(other._locToItvVal.at(key));
|
|
285
|
+
}
|
|
286
|
+
return es;
|
|
287
|
+
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/// domain widen with other, important! other widen this.
|
|
291
|
+
void IntervalExeState::widenWith(const IntervalExeState& other)
|
|
292
|
+
{
|
|
293
|
+
IntervalESBase::widenWith(other);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/// domain join with other, important! other widen this.
|
|
297
|
+
void IntervalExeState::joinWith(const IntervalExeState& other)
|
|
298
|
+
{
|
|
299
|
+
IntervalESBase::joinWith(other);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/// domain narrow with other, important! other widen this.
|
|
303
|
+
void IntervalExeState::narrowWith(const IntervalExeState& other)
|
|
304
|
+
{
|
|
305
|
+
IntervalESBase::narrowWith(other);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/// domain meet with other, important! other widen this.
|
|
309
|
+
void IntervalExeState::meetWith(const IntervalExeState& other)
|
|
310
|
+
{
|
|
311
|
+
IntervalESBase::meetWith(other);
|
|
312
|
+
}
|
|
@@ -30,19 +30,19 @@
|
|
|
30
30
|
using namespace SVF;
|
|
31
31
|
using namespace SVFUtil;
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
IntervalESBase RelationSolver::bilateral(const IntervalESBase &domain, const Z3Expr& phi,
|
|
34
34
|
u32_t descend_check)
|
|
35
35
|
{
|
|
36
36
|
/// init variables
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
IntervalESBase upper = domain.top();
|
|
38
|
+
IntervalESBase lower = domain.bottom();
|
|
39
39
|
u32_t meets_in_a_row = 0;
|
|
40
40
|
z3::solver solver = Z3Expr::getSolver();
|
|
41
41
|
z3::params p(Z3Expr::getContext());
|
|
42
42
|
/// TODO: add option for timeout
|
|
43
43
|
p.set(":timeout", static_cast<unsigned>(600)); // in milliseconds
|
|
44
44
|
solver.set(p);
|
|
45
|
-
|
|
45
|
+
IntervalESBase consequence;
|
|
46
46
|
|
|
47
47
|
/// start processing
|
|
48
48
|
while (lower != upper)
|
|
@@ -82,9 +82,9 @@ IntervalExeState RelationSolver::bilateral(const IntervalExeState &domain, const
|
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
solver.pop();
|
|
85
|
-
|
|
85
|
+
IntervalESBase newLower = domain.bottom();
|
|
86
86
|
newLower.joinWith(lower);
|
|
87
|
-
|
|
87
|
+
IntervalESBase rhs = beta(solution, domain);
|
|
88
88
|
newLower.joinWith(rhs);
|
|
89
89
|
lower = newLower;
|
|
90
90
|
meets_in_a_row = 0;
|
|
@@ -98,7 +98,7 @@ IntervalExeState RelationSolver::bilateral(const IntervalExeState &domain, const
|
|
|
98
98
|
if (solver.reason_unknown() == "timeout")
|
|
99
99
|
return upper;
|
|
100
100
|
}
|
|
101
|
-
|
|
101
|
+
IntervalESBase newUpper = domain.top();
|
|
102
102
|
newUpper.meetWith(upper);
|
|
103
103
|
newUpper.meetWith(consequence);
|
|
104
104
|
upper = newUpper;
|
|
@@ -108,9 +108,9 @@ IntervalExeState RelationSolver::bilateral(const IntervalExeState &domain, const
|
|
|
108
108
|
return upper;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
IntervalESBase RelationSolver::RSY(const IntervalESBase& domain, const Z3Expr& phi)
|
|
112
112
|
{
|
|
113
|
-
|
|
113
|
+
IntervalESBase lower = domain.bottom();
|
|
114
114
|
z3::solver& solver = Z3Expr::getSolver();
|
|
115
115
|
z3::params p(Z3Expr::getContext());
|
|
116
116
|
/// TODO: add option for timeout
|
|
@@ -144,7 +144,7 @@ IntervalExeState RelationSolver::RSY(const IntervalExeState& domain, const Z3Exp
|
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
solver.pop();
|
|
147
|
-
|
|
147
|
+
IntervalESBase newLower = domain.bottom();
|
|
148
148
|
newLower.joinWith(lower);
|
|
149
149
|
newLower.joinWith(beta(solution, domain));
|
|
150
150
|
lower = newLower;
|
|
@@ -164,8 +164,8 @@ IntervalExeState RelationSolver::RSY(const IntervalExeState& domain, const Z3Exp
|
|
|
164
164
|
return lower;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
|
|
168
|
-
const
|
|
167
|
+
IntervalESBase RelationSolver::abstract_consequence(
|
|
168
|
+
const IntervalESBase& lower, const IntervalESBase& upper, const IntervalESBase& domain) const
|
|
169
169
|
{
|
|
170
170
|
/*Returns the "abstract consequence" of lower and upper.
|
|
171
171
|
|
|
@@ -181,7 +181,7 @@ IntervalExeState RelationSolver::abstract_consequence(
|
|
|
181
181
|
it != domain.getVarToVal().end(); ++it)
|
|
182
182
|
/// for variable in self.variables:
|
|
183
183
|
{
|
|
184
|
-
|
|
184
|
+
IntervalESBase proposed = domain.top(); /// proposed = self.top.copy()
|
|
185
185
|
proposed._varToItvVal[it->first] = lower._varToItvVal.at(it->first);
|
|
186
186
|
/// proposed.set_interval(variable, lower.interval_of(variable))
|
|
187
187
|
/// proposed._locToItvVal
|
|
@@ -193,7 +193,7 @@ IntervalExeState RelationSolver::abstract_consequence(
|
|
|
193
193
|
return lower; /// return lower.copy()
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
Z3Expr RelationSolver::gamma_hat(const
|
|
196
|
+
Z3Expr RelationSolver::gamma_hat(const IntervalESBase& exeState) const
|
|
197
197
|
{
|
|
198
198
|
Z3Expr res(Z3Expr::getContext().bool_val(true));
|
|
199
199
|
for (auto& item : exeState.getVarToVal())
|
|
@@ -209,8 +209,8 @@ Z3Expr RelationSolver::gamma_hat(const IntervalExeState& exeState) const
|
|
|
209
209
|
return res;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
Z3Expr RelationSolver::gamma_hat(const
|
|
213
|
-
const
|
|
212
|
+
Z3Expr RelationSolver::gamma_hat(const IntervalESBase& alpha,
|
|
213
|
+
const IntervalESBase& exeState) const
|
|
214
214
|
{
|
|
215
215
|
Z3Expr res(Z3Expr::getContext().bool_val(true));
|
|
216
216
|
for (auto& item : exeState.getVarToVal())
|
|
@@ -227,7 +227,7 @@ Z3Expr RelationSolver::gamma_hat(const IntervalExeState& alpha,
|
|
|
227
227
|
return res;
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
Z3Expr RelationSolver::gamma_hat(u32_t id, const
|
|
230
|
+
Z3Expr RelationSolver::gamma_hat(u32_t id, const IntervalESBase& exeState) const
|
|
231
231
|
{
|
|
232
232
|
auto it = exeState.getVarToVal().find(id);
|
|
233
233
|
assert(it != exeState.getVarToVal().end() && "id not in varToVal?");
|
|
@@ -238,10 +238,10 @@ Z3Expr RelationSolver::gamma_hat(u32_t id, const IntervalExeState& exeState) con
|
|
|
238
238
|
return res;
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
|
|
242
|
-
|
|
241
|
+
IntervalESBase RelationSolver::beta(const Map<u32_t, double>& sigma,
|
|
242
|
+
const IntervalESBase& exeState) const
|
|
243
243
|
{
|
|
244
|
-
|
|
244
|
+
IntervalESBase res;
|
|
245
245
|
for (const auto& item : exeState.getVarToVal())
|
|
246
246
|
{
|
|
247
247
|
res._varToItvVal[item.first] = IntervalValue(
|
|
@@ -263,7 +263,7 @@ void RelationSolver::updateMap(Map<u32_t, NumericLiteral>& map, u32_t key, const
|
|
|
263
263
|
}
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
|
|
266
|
+
IntervalESBase RelationSolver::BS(const IntervalESBase& domain, const Z3Expr &phi)
|
|
267
267
|
{
|
|
268
268
|
/// because key of _varToItvVal is u32_t, -key may out of range for int
|
|
269
269
|
/// so we do key + bias for -key
|
|
@@ -307,7 +307,7 @@ IntervalExeState RelationSolver::BS(const IntervalExeState& domain, const Z3Expr
|
|
|
307
307
|
/// optimize each object
|
|
308
308
|
BoxedOptSolver(new_phi.simplify(), ret, low_values, high_values);
|
|
309
309
|
/// fill in the return values
|
|
310
|
-
|
|
310
|
+
IntervalESBase retInv;
|
|
311
311
|
for (const auto& item: ret)
|
|
312
312
|
{
|
|
313
313
|
if (item.first >= bias)
|