diff --git a/tests/value/octagons.c b/tests/value/octagons.c index 101dafb7febcfda4bf4d2d67b16d71a76e55aa50..cbc98a770dce506d2b40a7381db9045d56d17f0f 100644 --- a/tests/value/octagons.c +++ b/tests/value/octagons.c @@ -223,6 +223,39 @@ void pub301 () { } } +#define MAX 20 + +void arrays () { + int a[MAX], t[MAX]; + /*@ loop unroll MAX; */ // Unroll to ensure array initialization. + for (int i = 0; i < MAX; i++) { + a[i] = undet; + } + + int x = Frama_C_interval(1, MAX); + for (int j = x - 1; j >= 0; j--) { + // Need the relation j <= x-1 to prove that index x-1-j >= 0. + t[j] = a[x - 1 - j]; + } + + int y = Frama_C_interval(0, MAX-1); + int index = (MAX-1) - y; + for (int j = y; j < MAX; j++) { + // Need the relation index + j == MAX-1 to prove index >= 0. + t[index] = a[j]; + index --; + } + + // Same with a floating-point variable f instead of x. + float f = Frama_C_float_interval(0., (float)(MAX-1)); + index = (MAX-1) - (int)f; + for (int j = (int)f; j < MAX; j++) { + // Need the relation index + j == MAX-1 to prove index >= 0. + t[index] = a[j]; + index --; + } +} + void main () { demo (); integer_types (); @@ -234,4 +267,5 @@ void main () { interprocedural (); dump (); pub301 (); + arrays (); } diff --git a/tests/value/oracle/octagons.res.oracle b/tests/value/oracle/octagons.res.oracle index c5865a36e4b056718034bb0d8e4f90972ed6f8ea..467fabee6f41493dd9b4c639b48505dba0e3073a 100644 --- a/tests/value/oracle/octagons.res.oracle +++ b/tests/value/oracle/octagons.res.oracle @@ -5,7 +5,7 @@ [eva:initial-state] Values of globals at initialization undet ∈ [--..--] [eva] computing for function demo <- main. - Called from octagons.c:227. + Called from octagons.c:260. [eva] computing for function Frama_C_interval <- demo <- main. Called from octagons.c:12. [eva] using specification for function Frama_C_interval @@ -19,7 +19,7 @@ [eva] Recording results for demo [eva] Done for function demo [eva] computing for function integer_types <- main. - Called from octagons.c:228. + Called from octagons.c:261. [eva] computing for function Frama_C_interval <- integer_types <- main. Called from octagons.c:23. [eva] octagons.c:23: @@ -69,7 +69,7 @@ [eva] Recording results for integer_types [eva] Done for function integer_types [eva] computing for function arith <- main. - Called from octagons.c:229. + Called from octagons.c:262. [eva] computing for function Frama_C_interval <- arith <- main. Called from octagons.c:70. [eva] octagons.c:70: @@ -107,7 +107,7 @@ [eva] Recording results for arith [eva] Done for function arith [eva] computing for function join <- main. - Called from octagons.c:230. + Called from octagons.c:263. [eva] computing for function Frama_C_interval <- join <- main. Called from octagons.c:103. [eva] octagons.c:103: @@ -138,7 +138,7 @@ [eva] Recording results for join [eva] Done for function join [eva] computing for function loop <- main. - Called from octagons.c:231. + Called from octagons.c:264. [eva] computing for function Frama_C_interval <- loop <- main. Called from octagons.c:128. [eva] octagons.c:128: @@ -164,7 +164,7 @@ [eva] Recording results for loop [eva] Done for function loop [eva] computing for function pointers <- main. - Called from octagons.c:232. + Called from octagons.c:265. [eva] computing for function Frama_C_interval <- pointers <- main. Called from octagons.c:151. [eva] octagons.c:151: @@ -188,7 +188,7 @@ [eva] Recording results for pointers [eva] Done for function pointers [eva] computing for function saturate <- main. - Called from octagons.c:233. + Called from octagons.c:266. [eva] computing for function Frama_C_interval <- saturate <- main. Called from octagons.c:169. [eva] octagons.c:169: @@ -203,7 +203,7 @@ [eva] Recording results for saturate [eva] Done for function saturate [eva] computing for function interprocedural <- main. - Called from octagons.c:234. + Called from octagons.c:267. [eva] computing for function Frama_C_interval <- interprocedural <- main. Called from octagons.c:182. [eva] octagons.c:182: @@ -234,7 +234,7 @@ [eva] Recording results for interprocedural [eva] Done for function interprocedural [eva] computing for function dump <- main. - Called from octagons.c:235. + Called from octagons.c:268. [eva] computing for function Frama_C_interval <- dump <- main. Called from octagons.c:206. [eva] octagons.c:206: @@ -259,7 +259,7 @@ [eva] Recording results for dump [eva] Done for function dump [eva] computing for function pub301 <- main. - Called from octagons.c:236. + Called from octagons.c:269. [eva] computing for function Frama_C_interval <- pub301 <- main. Called from octagons.c:216. [eva] octagons.c:216: @@ -272,6 +272,31 @@ [eva] Done for function Frama_C_interval [eva] Recording results for pub301 [eva] Done for function pub301 +[eva] computing for function arrays <- main. + Called from octagons.c:270. +[eva] computing for function Frama_C_interval <- arrays <- main. + Called from octagons.c:235. +[eva] octagons.c:235: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] octagons.c:236: starting to merge loop iterations +[eva] computing for function Frama_C_interval <- arrays <- main. + Called from octagons.c:241. +[eva] octagons.c:241: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] octagons.c:243: starting to merge loop iterations +[eva] computing for function Frama_C_float_interval <- arrays <- main. + Called from octagons.c:250. +[eva] using specification for function Frama_C_float_interval +[eva] octagons.c:250: + function Frama_C_float_interval: precondition 'finite' got status valid. +[eva] octagons.c:250: + function Frama_C_float_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_float_interval +[eva] octagons.c:252: starting to merge loop iterations +[eva] Recording results for arrays +[eva] Done for function arrays [eva] Recording results for main [eva] done for function main [eva] ====== VALUES COMPUTED ====== @@ -283,6 +308,14 @@ x ∈ [-28..0] y ∈ [1..29] r ∈ [-29..106] +[eva:final-states] Values at end of function arrays: + Frama_C_entropy_source ∈ [--..--] + a[0..19] ∈ [--..--] + t[0..19] ∈ [--..--] or UNINITIALIZED + x ∈ [1..20] + y ∈ [0..19] + index ∈ {-1} + f ∈ [-0. .. 19.] [eva:final-states] Values at end of function demo: Frama_C_entropy_source ∈ [--..--] y ∈ [--..--] @@ -364,6 +397,10 @@ [from] Computing for function Frama_C_interval <-arith [from] Done for function Frama_C_interval [from] Done for function arith +[from] Computing for function arrays +[from] Computing for function Frama_C_float_interval <-arrays +[from] Done for function Frama_C_float_interval +[from] Done for function arrays [from] Computing for function demo [from] Done for function demo [from] Computing for function diff @@ -390,11 +427,16 @@ [from] Done for function main [from] ====== DEPENDENCIES COMPUTED ====== These dependencies hold at termination for the executions that terminate: +[from] Function Frama_C_float_interval: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) + \result FROM Frama_C_entropy_source; min; max [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 arrays: + 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: @@ -424,6 +466,10 @@ Frama_C_entropy_source; k; a; b; x; y; r [inout] Inputs for function arith: Frama_C_entropy_source +[inout] Out (internal) for function arrays: + Frama_C_entropy_source; a[0..19]; t[0..19]; i; x; j; y; index; j_0; f; j_1 +[inout] Inputs for function arrays: + Frama_C_entropy_source; undet [inout] Out (internal) for function demo: Frama_C_entropy_source; y; k; x; r; t [inout] Inputs for function demo: diff --git a/tests/value/oracle_apron/octagons.res.oracle b/tests/value/oracle_apron/octagons.res.oracle index 431455b54fd064e93b64e9536f2b4b3c53d9326f..b97678e683e847c47493ab076e688d4dd49654cb 100644 --- a/tests/value/oracle_apron/octagons.res.oracle +++ b/tests/value/oracle_apron/octagons.res.oracle @@ -1,4 +1,4 @@ -325,328c325,328 +358,361c358,361 < a ∈ [-1024..2147483647] < b ∈ [-1023..2147483647] < c ∈ [-1023..2147483647] diff --git a/tests/value/oracle_equality/octagons.res.oracle b/tests/value/oracle_equality/octagons.res.oracle index 1917faccaadbc5d43d3e549c0832dba3b8ad3ddb..abca6359403c77796f85f7af8887c5f768258aa0 100644 --- a/tests/value/oracle_equality/octagons.res.oracle +++ b/tests/value/oracle_equality/octagons.res.oracle @@ -2,7 +2,7 @@ < [eva] octagons.c:54: Frama_C_show_each_unreduced_char: [-128..127], [-128..127] --- > [eva] octagons.c:54: Frama_C_show_each_unreduced_char: [-118..114], [6..127] -312c312 +345c345 < ct ∈ [--..--] or UNINITIALIZED --- > ct ∈ [6..127] or UNINITIALIZED diff --git a/tests/value/oracle_gauges/octagons.res.oracle b/tests/value/oracle_gauges/octagons.res.oracle index 37ac2f4f7980b9d318b6577cc9d68019f762f69c..f65503794d5e3a35cfa3a0c62bfdceccc32849dc 100644 --- a/tests/value/oracle_gauges/octagons.res.oracle +++ b/tests/value/oracle_gauges/octagons.res.oracle @@ -11,7 +11,7 @@ < [eva] octagons.c:143: Frama_C_show_each_imprecise: [-2147483648..1] --- > [eva] octagons.c:143: Frama_C_show_each_imprecise: [-2468..1] -325,328c317,320 +358,361c350,353 < a ∈ [-1024..2147483647] < b ∈ [-1023..2147483647] < c ∈ [-1023..2147483647] @@ -21,7 +21,7 @@ > b ∈ [-181..1867] > c ∈ [-602..1446] > d ∈ [-190..1874] -330c322 +363c355 < d2 ∈ [-2147483648..1] --- > d2 ∈ [-2468..1]