diff --git a/tests/value/diff_apron b/tests/value/diff_apron index 2ead3a445bbc76a876c5e89fb0e57325a79f52a0..e43d97743cb15e14e2c12e5d5ca200006be5b5a1 100644 --- a/tests/value/diff_apron +++ b/tests/value/diff_apron @@ -670,6 +670,17 @@ diff tests/value/oracle/modulo.res.oracle tests/value/oracle_apron/modulo.res.or 60a109,110 > [eva] tests/value/modulo.i:64: Frama_C_show_each_3: [-10..10], [-9..9], [-8..8] > [eva] tests/value/modulo.i:64: Frama_C_show_each_3: [-9..9], [-8..8], [-7..7] +diff tests/value/oracle/octagons.res.oracle tests/value/oracle_apron/octagons.res.oracle +270,273c270,273 +< a ∈ [-1024..2147483647] +< b ∈ [-1023..2147483647] +< c ∈ [-1023..2147483647] +< d ∈ [-1032..2147483647] +--- +> a ∈ [-603..2147483646] +> b ∈ [-602..2147483647] +> c ∈ [-602..1446] +> d ∈ [-611..2147483647] diff tests/value/oracle/offsetmap.0.res.oracle tests/value/oracle_apron/offsetmap.0.res.oracle 62,63c62 < a[bits 0 to 7] ∈ {1; 6} diff --git a/tests/value/diff_equalities b/tests/value/diff_equalities index 821b7e3c2fc6803fa2584c2b2deedc7692ba8b60..83d093f00364f8bd80e50ed2ff37c260660b6c70 100644 --- a/tests/value/diff_equalities +++ b/tests/value/diff_equalities @@ -610,6 +610,15 @@ diff tests/value/oracle/nonlin.res.oracle tests/value/oracle_equalities/nonlin.r < q ∈ {{ &x + [-400..400],0%4 }} --- > q ∈ {{ &x }} +diff tests/value/oracle/octagons.res.oracle tests/value/oracle_equalities/octagons.res.oracle +29c29 +< Frama_C_show_each_unreduced_unsigned: [0..4294967295], [0..4294967295] +--- +> Frama_C_show_each_unreduced_unsigned: [0..4294967295], [6..4294967295] +255c255 +< t ∈ [--..--] or UNINITIALIZED +--- +> t ∈ [6..4294967295] or UNINITIALIZED diff tests/value/oracle/offsetmap.0.res.oracle tests/value/oracle_equalities/offsetmap.0.res.oracle 38d37 < [eva] Recording results for g diff --git a/tests/value/diff_gauges b/tests/value/diff_gauges index e0312fea2b92804faca6c4ccae3d2e2afc83fda6..ab9ecdc28fc62ed33d66256204e38c85a05476ed 100644 --- a/tests/value/diff_gauges +++ b/tests/value/diff_gauges @@ -889,6 +889,34 @@ diff tests/value/oracle/noreturn.res.oracle tests/value/oracle_gauges/noreturn.r > [eva] tests/value/noreturn.i:7: starting to merge loop iterations 36a40 > [eva] tests/value/noreturn.i:13: starting to merge loop iterations +diff tests/value/oracle/octagons.res.oracle tests/value/oracle_gauges/octagons.res.oracle +121,128d120 +< [eva:alarm] tests/value/octagons.c:107: Warning: +< signed overflow. assert a + 2 ≤ 2147483647; +< [eva:alarm] tests/value/octagons.c:108: Warning: +< signed overflow. assert b + 2 ≤ 2147483647; +< [eva:alarm] tests/value/octagons.c:110: Warning: +< signed overflow. assert a + k ≤ 2147483647; +< [eva:alarm] tests/value/octagons.c:113: Warning: +< signed overflow. assert -2147483648 ≤ c - a; +130c122 +< [eva] tests/value/octagons.c:116: Frama_C_show_each_imprecise: [-2147483648..1] +--- +> [eva] tests/value/octagons.c:116: Frama_C_show_each_imprecise: [-2468..1] +270,273c262,265 +< a ∈ [-1024..2147483647] +< b ∈ [-1023..2147483647] +< c ∈ [-1023..2147483647] +< d ∈ [-1032..2147483647] +--- +> a ∈ [-182..1866] +> b ∈ [-181..1867] +> c ∈ [-602..1446] +> d ∈ [-190..1874] +275c267 +< d2 ∈ [-2147483648..1] +--- +> d2 ∈ [-2468..1] diff tests/value/oracle/reduce_formals.res.oracle tests/value/oracle_gauges/reduce_formals.res.oracle 10a11 > [eva] tests/value/reduce_formals.i:5: starting to merge loop iterations diff --git a/tests/value/octagons.c b/tests/value/octagons.c new file mode 100644 index 0000000000000000000000000000000000000000..34f6a7191191f6c61b10a9a4b7dc9f96f0352111 --- /dev/null +++ b/tests/value/octagons.c @@ -0,0 +1,196 @@ +/* run.config* + STDOPT: +" -eva-octagons-domain -eva-octagons-through-calls -eva-msg-key=d-octagons,-d-cvalue" +*/ + +#include <__fc_builtin.h> + +volatile int undet; + +/* Minimal example from the Eva user manual. */ +void demo () { + int y = undet; + int k = Frama_C_interval(0, 10); + int x = y - k; + int r = x + 3 - y; // r \in [-7..3] + int t; + if (y > 15) + t = x; // t \in [6..] +} + +/* Same example as [demo] but with other integer types. */ +void integer_types () { + unsigned int k, x, y, r, t; + y = undet; + k = Frama_C_interval(0, 10); + x = y - k; // No octagon inferred as [y - k] may overflow. + r = x + 3 - y; + if (y > 15) + t = x; + Frama_C_show_each_unreduced_unsigned(r, t); + char ck, cx, cy, cr, ct; + cy = undet; + ck = Frama_C_interval(0, 10); + cx = cy - ck; // An octagon should be inferred despite the casts to int. + cr = cx + 3 - cy; + if (cy > 15) + ct = cx; + Frama_C_show_each_reduced_char(cr, ct); +} + +/* A test with multiple mathematical operations to complicate the inference + and use of octagons. */ +void arith () { + int k = Frama_C_interval(0, 4); + int a, b, x, y, r; + /* 1. Infer octagons from assignments. */ + a = Frama_C_interval(5, 25); + b = Frama_C_interval(-12, 12); + x = 1 - (a + 2*k - 4); // x + a ∈ [-3..5] + y = 4*4 - k + (1 + b); // y - b ∈ [13..17] + /* 1.1 Use octagons in the evaluation of expressions. */ + r = 2 * (10 - (b - 1 - y) - (x - 2 + a)); // r ∈ [42..66] + Frama_C_show_each_precise(r); + r = 2 * (10 - (b + x - 3 - y + a)); // r ∈ [42..66] + Frama_C_show_each_imprecise(r); + k = Frama_C_interval(0, 4); + /* 1.1 Use octagons to propagate variable reductions. */ + if (12 - x < (k+1)*3) { // x > -3 + r = 10 * a; // so a < 8 + Frama_C_show_each(r); // {50; 60; 70} + } + /* 2. Infer octagons from conditions. */ + a = Frama_C_interval(-1024, 1024); + b = Frama_C_interval(-1024, 1024); + if (20*k - a - 17 < 5 - b + (1 << 3) // a - b > -30 + && a + (k+6)/2 - b <= 32) { // a - b <= 29 + r = b - a; + Frama_C_show_each(r); // [-29..29] + } + if (a < b && b <= a) + Frama_C_show_each_BOTTOM(a, b); +} + +/* Tests the join of the octagons domain. */ +void join () { + int a, b, r; + int k = Frama_C_interval(-1, 4); + if (undet) { + a = undet; + b = a + k; + } else { + a = Frama_C_interval(-32, -10); + b = k * 5; + } + // In both case, we have b - a >= -1. The "else" branch was more precise. + r = b - a + 1; + Frama_C_show_each_join_positive(r); + if (undet) { + a = undet; + b = - (a + k); + } else { + a = Frama_C_interval(-32, -10); + b = k * 5; + } + // In both case, we have b + a <= 10. The "then" branch was more precise. + r = b + a - 10; + Frama_C_show_each_join_negative(r); +} + +/* Tests the octagons domain within loops. */ +void loop () { + int k = Frama_C_interval(-8, 8); + int a = Frama_C_interval(-1024, 1024); + int b = a + 1; + int c = a + 1; + int d = a + k; + for (int i = 0; i < 421; i++) { + a = a + 2; + b = b + 2; // The relation between a and b should be maintained in the loop. + c = c + 1; // The relation between a and c should be lost in the loop. + d = a + k; // This relation should be maintained. + } + int d1 = b - a; + int d2 = c - a; + int d3 = d - a; + Frama_C_show_each_singleton_1(d1); + Frama_C_show_each_imprecise(d2); + Frama_C_show_each_precise(d3); +} + +/* Tests the soundness of the octagons domain in presence of pointers. */ +void pointers () { + int x, y, r; + int *px = &x, *pr = &r; + x = Frama_C_interval(-1024, 1024); + y = x + 1; + r = y - x; + Frama_C_show_each_singleton_1(r); + *px = Frama_C_interval(-1024, 1024); + Frama_C_show_each_singleton_1(r); + *pr = Frama_C_interval(-1024, 1024); + Frama_C_show_each_unknown(r); + r = y - x; + Frama_C_show_each_unknown(r); + y = x + 2; + r = y - x; + Frama_C_show_each_singleton_2(r); +} + +/* Tests the saturation of octagons: inference of a relation between (x, z) + from relations between (x, y) and between (y, z). */ +void saturate () { + int k = Frama_C_interval(-6, 4); + int x = Frama_C_interval(-1024, 1024); + int y = k - x; + int z = y + 1; + int result = - z - x; // result == k + 1 + Frama_C_show_each_saturate(result); // ∈ [-5..5] +} + +int diff (int x, int y) { return x - y; } +int neg (int x) { return -x; } + +/* Tests the propagation of octagons through function calls. */ +void interprocedural () { + int a = Frama_C_interval(-4, 12); + int b = Frama_C_interval(-4, 12); + int neg_a = neg(a); + int neg_b = neg(b); + /* [r1] is the direct difference [a-b], [r2] uses the result of the function + [neg] (and thus need the octagon inferred in [neg]), and [r3] calls the + function [diff] (and the analysis of [diff] needs the octagons inferred + here about a and b). */ + int r1, r2, r3; + if (a > b) { + r1 = a - b; + r2 = a + neg_b; + r3 = diff (a, b); + } else { + r1 = b - a; + r2 = b + neg_a; + r3 = diff (b, a); + } + /* With the interprocedural octagons, r1, r2 and r3 must be equally precise. */ + Frama_C_show_each_equal(r1, r2, r3); +} + +/* Prints the octagons state. */ +void dump () { + char k = Frama_C_interval(0, 8); + char a = undet; + char b = a + k; + char c = b - k; + Frama_C_dump_each(); +} + +void main () { + demo (); + integer_types (); + arith (); + join (); + loop (); + pointers (); + saturate (); + interprocedural (); + dump (); +} diff --git a/tests/value/oracle/octagons.res.oracle b/tests/value/oracle/octagons.res.oracle new file mode 100644 index 0000000000000000000000000000000000000000..2f2626a65ffa2d0009b042400cd207ba02de8264 --- /dev/null +++ b/tests/value/oracle/octagons.res.oracle @@ -0,0 +1,407 @@ +[kernel] Parsing tests/value/octagons.c (with preprocessing) +[eva] Analyzing a complete application starting at main +[eva] Computing initial state +[eva] Initial state computed +[eva:initial-state] Values of globals at initialization + undet ∈ [--..--] +[eva] computing for function demo <- main. + Called from tests/value/octagons.c:187. +[eva] computing for function Frama_C_interval <- demo <- main. + Called from tests/value/octagons.c:12. +[eva] using specification for function Frama_C_interval +[eva] tests/value/octagons.c:12: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva:alarm] tests/value/octagons.c:13: Warning: + signed overflow. assert -2147483648 ≤ y - k; +[eva:alarm] tests/value/octagons.c:14: Warning: + signed overflow. assert x + 3 ≤ 2147483647; +[eva] Recording results for demo +[eva] Done for function demo +[eva] computing for function integer_types <- main. + Called from tests/value/octagons.c:188. +[eva] computing for function Frama_C_interval <- integer_types <- main. + Called from tests/value/octagons.c:24. +[eva] tests/value/octagons.c:24: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:29: + Frama_C_show_each_unreduced_unsigned: [0..4294967295], [0..4294967295] +[eva] computing for function Frama_C_interval <- integer_types <- main. + Called from tests/value/octagons.c:32. +[eva] tests/value/octagons.c:32: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:37: + Frama_C_show_each_reduced_char: [-7..3], [6..127] +[eva] Recording results for integer_types +[eva] Done for function integer_types +[eva] computing for function arith <- main. + Called from tests/value/octagons.c:189. +[eva] computing for function Frama_C_interval <- arith <- main. + Called from tests/value/octagons.c:43. +[eva] tests/value/octagons.c:43: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] computing for function Frama_C_interval <- arith <- main. + Called from tests/value/octagons.c:46. +[eva] tests/value/octagons.c:46: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] computing for function Frama_C_interval <- arith <- main. + Called from tests/value/octagons.c:47. +[eva] tests/value/octagons.c:47: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:52: Frama_C_show_each_precise: [42..66],0%2 +[eva] tests/value/octagons.c:54: Frama_C_show_each_imprecise: [2..106],0%2 +[eva] computing for function Frama_C_interval <- arith <- main. + Called from tests/value/octagons.c:55. +[eva] tests/value/octagons.c:55: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:59: Frama_C_show_each: {50; 60; 70} +[eva] computing for function Frama_C_interval <- arith <- main. + Called from tests/value/octagons.c:62. +[eva] tests/value/octagons.c:62: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] computing for function Frama_C_interval <- arith <- main. + Called from tests/value/octagons.c:63. +[eva] tests/value/octagons.c:63: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:67: Frama_C_show_each: [-29..29] +[eva] Recording results for arith +[eva] Done for function arith +[eva] computing for function join <- main. + Called from tests/value/octagons.c:190. +[eva] computing for function Frama_C_interval <- join <- main. + Called from tests/value/octagons.c:76. +[eva] tests/value/octagons.c:76: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva:alarm] tests/value/octagons.c:79: Warning: + signed overflow. assert -2147483648 ≤ a + k; +[eva:alarm] tests/value/octagons.c:79: Warning: + signed overflow. assert a + k ≤ 2147483647; +[eva] computing for function Frama_C_interval <- join <- main. + Called from tests/value/octagons.c:81. +[eva] tests/value/octagons.c:81: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:86: Frama_C_show_each_join_positive: [0..53] +[eva:alarm] tests/value/octagons.c:89: Warning: + signed overflow. assert -2147483648 ≤ a + k; +[eva:alarm] tests/value/octagons.c:89: Warning: + signed overflow. assert a + k ≤ 2147483647; +[eva:alarm] tests/value/octagons.c:89: Warning: + signed overflow. assert -((int)(a + k)) ≤ 2147483647; +[eva] computing for function Frama_C_interval <- join <- main. + Called from tests/value/octagons.c:91. +[eva] tests/value/octagons.c:91: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:96: Frama_C_show_each_join_negative: [-47..0] +[eva] Recording results for join +[eva] Done for function join +[eva] computing for function loop <- main. + Called from tests/value/octagons.c:191. +[eva] computing for function Frama_C_interval <- loop <- main. + Called from tests/value/octagons.c:101. +[eva] tests/value/octagons.c:101: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] computing for function Frama_C_interval <- loop <- main. + Called from tests/value/octagons.c:102. +[eva] tests/value/octagons.c:102: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:106: starting to merge loop iterations +[eva:alarm] tests/value/octagons.c:107: Warning: + signed overflow. assert a + 2 ≤ 2147483647; +[eva:alarm] tests/value/octagons.c:108: Warning: + signed overflow. assert b + 2 ≤ 2147483647; +[eva:alarm] tests/value/octagons.c:110: Warning: + signed overflow. assert a + k ≤ 2147483647; +[eva:alarm] tests/value/octagons.c:113: Warning: + signed overflow. assert -2147483648 ≤ c - a; +[eva] tests/value/octagons.c:115: Frama_C_show_each_singleton_1: {1} +[eva] tests/value/octagons.c:116: Frama_C_show_each_imprecise: [-2147483648..1] +[eva] tests/value/octagons.c:117: Frama_C_show_each_precise: [-8..8] +[eva] Recording results for loop +[eva] Done for function loop +[eva] computing for function pointers <- main. + Called from tests/value/octagons.c:192. +[eva] computing for function Frama_C_interval <- pointers <- main. + Called from tests/value/octagons.c:124. +[eva] tests/value/octagons.c:124: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:127: Frama_C_show_each_singleton_1: {1} +[eva] computing for function Frama_C_interval <- pointers <- main. + Called from tests/value/octagons.c:128. +[eva] tests/value/octagons.c:128: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:129: Frama_C_show_each_singleton_1: {1} +[eva] computing for function Frama_C_interval <- pointers <- main. + Called from tests/value/octagons.c:130. +[eva] tests/value/octagons.c:130: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:131: Frama_C_show_each_unknown: [-1024..1024] +[eva] tests/value/octagons.c:133: Frama_C_show_each_unknown: [-2047..2049] +[eva] tests/value/octagons.c:136: Frama_C_show_each_singleton_2: {2} +[eva] Recording results for pointers +[eva] Done for function pointers +[eva] computing for function saturate <- main. + Called from tests/value/octagons.c:193. +[eva] computing for function Frama_C_interval <- saturate <- main. + Called from tests/value/octagons.c:142. +[eva] tests/value/octagons.c:142: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] computing for function Frama_C_interval <- saturate <- main. + Called from tests/value/octagons.c:143. +[eva] tests/value/octagons.c:143: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:147: Frama_C_show_each_saturate: [-5..5] +[eva] Recording results for saturate +[eva] Done for function saturate +[eva] computing for function interprocedural <- main. + Called from tests/value/octagons.c:194. +[eva] computing for function Frama_C_interval <- interprocedural <- main. + Called from tests/value/octagons.c:155. +[eva] tests/value/octagons.c:155: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] computing for function Frama_C_interval <- interprocedural <- main. + Called from tests/value/octagons.c:156. +[eva] tests/value/octagons.c:156: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] computing for function neg <- interprocedural <- main. + Called from tests/value/octagons.c:157. +[eva] Recording results for neg +[eva] Done for function neg +[eva] computing for function neg <- interprocedural <- main. + Called from tests/value/octagons.c:158. +[eva] Recording results for neg +[eva] Done for function neg +[eva] computing for function diff <- interprocedural <- main. + Called from tests/value/octagons.c:167. +[eva] Recording results for diff +[eva] Done for function diff +[eva] computing for function diff <- interprocedural <- main. + Called from tests/value/octagons.c:171. +[eva] Recording results for diff +[eva] Done for function diff +[eva] tests/value/octagons.c:174: + Frama_C_show_each_equal: [0..16], [0..16], [0..16] +[eva] Recording results for interprocedural +[eva] Done for function interprocedural +[eva] computing for function dump <- main. + Called from tests/value/octagons.c:195. +[eva] computing for function Frama_C_interval <- dump <- main. + Called from tests/value/octagons.c:179. +[eva] tests/value/octagons.c:179: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] tests/value/octagons.c:183: + Frama_C_dump_each: + # Octagon domain: + {[ k - tmp ∈ {0} + a - b ∈ [-8..0] + b - c ∈ [0..8] + a - c ∈ [-8..8] + ]} + ==END OF DUMP== +[eva] Recording results for dump +[eva] Done for function dump +[eva] Recording results for main +[eva] done for function main +[eva] ====== VALUES COMPUTED ====== +[eva:final-states] Values at end of function arith: + Frama_C_entropy_source ∈ [--..--] + k ∈ {0; 1; 2; 3; 4} + a ∈ [-1024..1024] + b ∈ [-1024..1024] + x ∈ [-28..0] + y ∈ [1..29] + r ∈ [-29..106] +[eva:final-states] Values at end of function demo: + Frama_C_entropy_source ∈ [--..--] + y ∈ [--..--] + k ∈ [0..10] + x ∈ [-2147483648..2147483644] + r ∈ [-7..3] + t ∈ [6..2147483644] or UNINITIALIZED +[eva:final-states] Values at end of function diff: + __retres ∈ [0..16] +[eva:final-states] Values at end of function dump: + Frama_C_entropy_source ∈ [--..--] + k ∈ [0..8] + a ∈ [--..--] + b ∈ [--..--] + c ∈ [--..--] +[eva:final-states] Values at end of function integer_types: + Frama_C_entropy_source ∈ [--..--] + k ∈ [0..10] + x ∈ [--..--] + y ∈ [--..--] + r ∈ [--..--] + t ∈ [--..--] or UNINITIALIZED + ck ∈ [0..10] + cx ∈ [--..--] + cy ∈ [--..--] + cr ∈ [-7..3] + ct ∈ [6..127] or UNINITIALIZED +[eva:final-states] Values at end of function join: + Frama_C_entropy_source ∈ [--..--] + a ∈ [--..--] + b ∈ [-2147483647..2147483647] + r ∈ [-47..0] + k ∈ {-1; 0; 1; 2; 3; 4} +[eva:final-states] Values at end of function loop: + Frama_C_entropy_source ∈ [--..--] + k ∈ [-8..8] + a ∈ [-1024..2147483647] + b ∈ [-1023..2147483647] + c ∈ [-1023..2147483647] + d ∈ [-1032..2147483647] + d1 ∈ {1} + d2 ∈ [-2147483648..1] + d3 ∈ [-8..8] +[eva:final-states] Values at end of function neg: + __retres ∈ [-12..4] +[eva:final-states] Values at end of function interprocedural: + Frama_C_entropy_source ∈ [--..--] + a ∈ [-4..12] + b ∈ [-4..12] + neg_a ∈ [-12..4] + neg_b ∈ [-12..4] + r1 ∈ [0..16] + r2 ∈ [0..16] + r3 ∈ [0..16] +[eva:final-states] Values at end of function pointers: + Frama_C_entropy_source ∈ [--..--] + x ∈ [-1024..1024] + y ∈ [-1022..1026] + r ∈ {2} + px ∈ {{ &x }} + pr ∈ {{ &r }} +[eva:final-states] Values at end of function saturate: + Frama_C_entropy_source ∈ [--..--] + k ∈ [-6..4] + x ∈ [-1024..1024] + y ∈ [-1030..1028] + z ∈ [-1029..1029] + result ∈ [-5..5] +[eva:final-states] Values at end of function main: + Frama_C_entropy_source ∈ [--..--] +[from] Computing for function arith +[from] Computing for function Frama_C_interval <-arith +[from] Done for function Frama_C_interval +[from] Done for function arith +[from] Computing for function demo +[from] Done for function demo +[from] Computing for function diff +[from] Done for function diff +[from] Computing for function dump +[from] Done for function dump +[from] Computing for function integer_types +[from] Done for function integer_types +[from] Computing for function join +[from] Done for function join +[from] Computing for function loop +[from] Done for function loop +[from] Computing for function neg +[from] Done for function neg +[from] Computing for function interprocedural +[from] Done for function interprocedural +[from] Computing for function pointers +[from] Done for function pointers +[from] Computing for function saturate +[from] Done for function saturate +[from] Computing for function main +[from] Done for function main +[from] ====== DEPENDENCIES COMPUTED ====== + These dependencies hold at termination for the executions that terminate: +[from] Function Frama_C_interval: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) + \result FROM Frama_C_entropy_source; min; max +[from] Function arith: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) +[from] Function demo: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) +[from] Function diff: + \result FROM x; y +[from] Function dump: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) +[from] Function integer_types: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) +[from] Function join: + Frama_C_entropy_source FROM Frama_C_entropy_source; undet (and SELF) +[from] Function loop: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) +[from] Function neg: + \result FROM x +[from] Function interprocedural: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) +[from] Function pointers: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) +[from] Function saturate: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) +[from] Function main: + Frama_C_entropy_source FROM Frama_C_entropy_source; undet (and SELF) +[from] ====== END OF DEPENDENCIES ====== +[inout] Out (internal) for function arith: + Frama_C_entropy_source; k; a; b; x; y; r +[inout] Inputs for function arith: + Frama_C_entropy_source +[inout] Out (internal) for function demo: + Frama_C_entropy_source; y; k; x; r; t +[inout] Inputs for function demo: + Frama_C_entropy_source; undet +[inout] Out (internal) for function diff: + __retres +[inout] Inputs for function diff: + \nothing +[inout] Out (internal) for function dump: + Frama_C_entropy_source; k; tmp; a; b; c +[inout] Inputs for function dump: + Frama_C_entropy_source; undet +[inout] Out (internal) for function integer_types: + Frama_C_entropy_source; k; x; y; r; t; tmp; ck; cx; cy; cr; ct; tmp_0 +[inout] Inputs for function integer_types: + Frama_C_entropy_source; undet +[inout] Out (internal) for function join: + Frama_C_entropy_source; a; b; r; k +[inout] Inputs for function join: + Frama_C_entropy_source; undet +[inout] Out (internal) for function loop: + Frama_C_entropy_source; k; a; b; c; d; i; d1; d2; d3 +[inout] Inputs for function loop: + Frama_C_entropy_source +[inout] Out (internal) for function neg: + __retres +[inout] Inputs for function neg: + \nothing +[inout] Out (internal) for function interprocedural: + Frama_C_entropy_source; a; b; neg_a; neg_b; r1; r2; r3 +[inout] Inputs for function interprocedural: + Frama_C_entropy_source +[inout] Out (internal) for function pointers: + Frama_C_entropy_source; x; y; r; px; pr +[inout] Inputs for function pointers: + Frama_C_entropy_source +[inout] Out (internal) for function saturate: + Frama_C_entropy_source; k; x; y; z; result +[inout] Inputs for function saturate: + Frama_C_entropy_source +[inout] Out (internal) for function main: + Frama_C_entropy_source +[inout] Inputs for function main: + Frama_C_entropy_source; undet