diff --git a/tests/value/initialized.c b/tests/value/initialized.c index 2292df35211489154198dc5402681dd5ebd0f99e..3e04b3cc71674441815e291dae3d6f580cf4586b 100644 --- a/tests/value/initialized.c +++ b/tests/value/initialized.c @@ -154,6 +154,41 @@ void g7() { //@ assert !\initialized(&key[0..127]); } +/* Tests the reduction by the negation of the \initialized predicate. */ +void reduce_by_negation () { + int x, y; + int *p = rand ? &x : &y; + if (rand) x = 0; + if (rand) y = 0; + if (rand) { + //@ assert !\initialized(&x); + //@ check invalid: \initialized(&x); + } + if (rand) { + //@ assert !\initialized(p); + //@ check unknown: \initialized(&x) && \initialized(&y); + } + if (rand) { + //@ assert !\initialized({&x, &y}); + //@ check unknown: \initialized(&x) && \initialized(&y); + } + if (rand) { + y = 0; + //@ assert !\initialized(p); + //@ check unknown: \initialized(&x); + } + if (rand) { + y = 0; + //@ assert !\initialized({&x, &y}); + //@ check invalid: \initialized(&x); + } + char t[10]; + for (int i = 0; i < 10; i++) + t[i] = i; + //@ assert !\initialized(&t[0..9]); + //@ check unknown: \initialized(&t[0..9]); +} + int main () { g1(); g2(); @@ -162,5 +197,6 @@ int main () { g5(); g6(); g7(); + reduce_by_negation(); return 0; } diff --git a/tests/value/oracle/initialized.res.oracle b/tests/value/oracle/initialized.res.oracle index 79cf5c4a3129d812402778bbe4f0ab7ba79dc9d2..f3d1c20aa17d60f4f052fe7a489807dd3537ff5f 100644 --- a/tests/value/oracle/initialized.res.oracle +++ b/tests/value/oracle/initialized.res.oracle @@ -13,7 +13,7 @@ v1 ∈ {0} i6 ∈ [--..--] [eva] computing for function g1 <- main. - Called from tests/value/initialized.c:158. + Called from tests/value/initialized.c:193. [eva] tests/value/initialized.c:19: starting to merge loop iterations [eva:alarm] tests/value/initialized.c:21: Warning: assertion got status unknown. [eva:alarm] tests/value/initialized.c:22: Warning: assertion got status unknown. @@ -65,7 +65,7 @@ [eva] Recording results for g1 [eva] Done for function g1 [eva] computing for function g2 <- main. - Called from tests/value/initialized.c:159. + Called from tests/value/initialized.c:194. [eva:alarm] tests/value/initialized.c:50: Warning: signed overflow. assert -2147483648 ≤ (int)(&b4) + (int)(&b4); [eva:alarm] tests/value/initialized.c:50: Warning: @@ -149,7 +149,7 @@ [eva] Recording results for g2 [eva] Done for function g2 [eva] computing for function g3 <- main. - Called from tests/value/initialized.c:160. + Called from tests/value/initialized.c:195. [eva:alarm] tests/value/initialized.c:89: Warning: assertion got status unknown. [eva:alarm] tests/value/initialized.c:93: Warning: accessing uninitialized left-value. assert \initialized(&r2); @@ -171,13 +171,13 @@ [eva] Recording results for g3 [eva] Done for function g3 [eva] computing for function g4 <- main. - Called from tests/value/initialized.c:161. + Called from tests/value/initialized.c:196. [eva:alarm] tests/value/initialized.c:104: Warning: accessing uninitialized left-value. assert \initialized(&y); [eva] Recording results for g4 [eva] Done for function g4 [eva] computing for function g5 <- main. - Called from tests/value/initialized.c:162. + Called from tests/value/initialized.c:197. [eva] computing for function wrong_assigns <- g5 <- main. Called from tests/value/initialized.c:127. [eva] using specification for function wrong_assigns @@ -193,7 +193,7 @@ [eva] Recording results for g5 [eva] Done for function g5 [eva] computing for function g6 <- main. - Called from tests/value/initialized.c:163. + Called from tests/value/initialized.c:198. [eva:alarm] tests/value/initialized.c:143: Warning: assertion got status unknown. [eva:alarm] tests/value/initialized.c:144: Warning: @@ -207,7 +207,7 @@ [eva] Recording results for g6 [eva] Done for function g6 [eva] computing for function g7 <- main. - Called from tests/value/initialized.c:164. + Called from tests/value/initialized.c:199. [eva] computing for function Frama_C_make_unknown <- g7 <- main. Called from tests/value/initialized.c:153. [eva] using specification for function Frama_C_make_unknown @@ -217,6 +217,35 @@ [eva] tests/value/initialized.c:154: assertion got status valid. [eva] Recording results for g7 [eva] Done for function g7 +[eva] computing for function reduce_by_negation <- main. + Called from tests/value/initialized.c:200. +[eva:alarm] tests/value/initialized.c:164: Warning: + assertion got status unknown. +[eva:alarm] tests/value/initialized.c:165: Warning: + check 'invalid' got status invalid. +[eva:alarm] tests/value/initialized.c:168: Warning: + assertion got status unknown. +[eva:alarm] tests/value/initialized.c:169: Warning: + check 'unknown' got status unknown. +[eva:alarm] tests/value/initialized.c:172: Warning: + assertion got status unknown. +[eva:alarm] tests/value/initialized.c:173: Warning: + check 'unknown' got status unknown. +[eva:alarm] tests/value/initialized.c:177: Warning: + assertion got status unknown. +[eva:alarm] tests/value/initialized.c:178: Warning: + check 'unknown' got status unknown. +[eva:alarm] tests/value/initialized.c:182: Warning: + assertion got status unknown. +[eva:alarm] tests/value/initialized.c:183: Warning: + check 'invalid' got status unknown. +[eva] tests/value/initialized.c:186: starting to merge loop iterations +[eva:alarm] tests/value/initialized.c:188: Warning: + assertion got status unknown. +[eva:alarm] tests/value/initialized.c:189: Warning: + check 'unknown' got status unknown. +[eva] Recording results for reduce_by_negation +[eva] Done for function reduce_by_negation [eva] Recording results for main [eva] done for function main [eva] tests/value/initialized.c:93: @@ -293,6 +322,11 @@ Frama_C_entropy_source ∈ [--..--] key[0..63] ∈ [--..--] [64..127] ∈ UNINITIALIZED +[eva:final-states] Values at end of function reduce_by_negation: + x ∈ {0} or UNINITIALIZED + y ∈ {0} or UNINITIALIZED + p ∈ {{ &x ; &y }} + t[0..9] ∈ [0..9] or UNINITIALIZED [eva:final-states] Values at end of function g5: v ∈ UNINITIALIZED p ∈ {{ &v1 ; &v2 }} @@ -319,6 +353,8 @@ [from] Computing for function Frama_C_make_unknown <-g7 [from] Done for function Frama_C_make_unknown [from] Done for function g7 +[from] Computing for function reduce_by_negation +[from] Done for function reduce_by_negation [from] Computing for function g5 [from] Computing for function wrong_assigns <-g5 [from] Done for function wrong_assigns @@ -348,6 +384,8 @@ i6 FROM rand (and SELF) [from] Function g7: Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) +[from] Function reduce_by_negation: + NO EFFECTS [from] Function wrong_assigns: v{.a; .b} FROM \nothing [from] Function g5: @@ -386,6 +424,10 @@ Frama_C_entropy_source; key[0..63] [inout] Inputs for function g7: Frama_C_entropy_source +[inout] Out (internal) for function reduce_by_negation: + x; y; p; tmp; t[0..9]; i +[inout] Inputs for function reduce_by_negation: + rand [inout] Out (internal) for function g5: v{.a; .b}; p; tmp [inout] Inputs for function g5: