From 10560989b33a1d5e03f68df48f1688185d73883f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr> Date: Thu, 21 Nov 2019 13:21:52 +0100 Subject: [PATCH] [Eva] Adds a test of the summary when using both RTE and Eva. --- tests/value/oracle/summary.0.res.oracle | 2 +- tests/value/oracle/summary.2.res.oracle | 4 +- tests/value/oracle/summary.3.res.oracle | 46 ++++---- tests/value/oracle/summary.4.res.oracle | 141 ++++++++++++++++++++++++ tests/value/summary.i | 1 + 5 files changed, 168 insertions(+), 26 deletions(-) create mode 100644 tests/value/oracle/summary.4.res.oracle diff --git a/tests/value/oracle/summary.0.res.oracle b/tests/value/oracle/summary.0.res.oracle index fe68cdf367b..e8a24300ea5 100644 --- a/tests/value/oracle/summary.0.res.oracle +++ b/tests/value/oracle/summary.0.res.oracle @@ -5,7 +5,7 @@ [eva:initial-state] Values of globals at initialization undet ∈ [--..--] volatile_d ∈ [--..--] -[kernel:annot:missing-spec] tests/value/summary.i:18: Warning: +[kernel:annot:missing-spec] tests/value/summary.i:19: Warning: Neither code nor specification for function minimalist, generating default assigns from the prototype [eva] using specification for function minimalist [eva] done for function minimalist diff --git a/tests/value/oracle/summary.2.res.oracle b/tests/value/oracle/summary.2.res.oracle index 642453d6393..a45ac0df3bf 100644 --- a/tests/value/oracle/summary.2.res.oracle +++ b/tests/value/oracle/summary.2.res.oracle @@ -5,10 +5,10 @@ [eva:initial-state] Values of globals at initialization undet ∈ [--..--] volatile_d ∈ [--..--] -[eva:alarm] tests/value/summary.i:14: Warning: division by zero. assert 0 ≢ 0; +[eva:alarm] tests/value/summary.i:15: Warning: division by zero. assert 0 ≢ 0; [eva] Recording results for bottom [eva] done for function bottom -[eva] tests/value/summary.i:14: +[eva] tests/value/summary.i:15: assertion 'Eva,division_by_zero' got final status invalid. [eva] ====== VALUES COMPUTED ====== [eva:final-states] Values at end of function bottom: diff --git a/tests/value/oracle/summary.3.res.oracle b/tests/value/oracle/summary.3.res.oracle index 800aa84f7f4..d59ad1e10e2 100644 --- a/tests/value/oracle/summary.3.res.oracle +++ b/tests/value/oracle/summary.3.res.oracle @@ -6,56 +6,56 @@ undet ∈ [--..--] volatile_d ∈ [--..--] [eva] computing for function alarms <- main. - Called from tests/value/summary.i:52. -[eva:alarm] tests/value/summary.i:26: Warning: + Called from tests/value/summary.i:53. +[eva:alarm] tests/value/summary.i:27: Warning: out of bounds read. assert \valid_read(p); -[eva:alarm] tests/value/summary.i:28: Warning: - out of bounds write. assert \valid(p); [eva:alarm] tests/value/summary.i:29: Warning: + out of bounds write. assert \valid(p); +[eva:alarm] tests/value/summary.i:30: Warning: accessing out of bounds index. assert 0 ≤ undet; -[eva:alarm] tests/value/summary.i:29: Warning: - accessing out of bounds index. assert undet < 10; [eva:alarm] tests/value/summary.i:30: Warning: - division by zero. assert undet ≢ 0; + accessing out of bounds index. assert undet < 10; [eva:alarm] tests/value/summary.i:31: Warning: + division by zero. assert undet ≢ 0; +[eva:alarm] tests/value/summary.i:32: Warning: signed overflow. assert -2147483648 ≤ undet + undet; -[eva:alarm] tests/value/summary.i:31: Warning: - signed overflow. assert undet + undet ≤ 2147483647; [eva:alarm] tests/value/summary.i:32: Warning: + signed overflow. assert undet + undet ≤ 2147483647; +[eva:alarm] tests/value/summary.i:33: Warning: invalid LHS operand for left shift. assert 0 ≤ undet; -[eva:alarm] tests/value/summary.i:32: Warning: +[eva:alarm] tests/value/summary.i:33: Warning: invalid RHS operand for shift. assert 0 ≤ undet < 32; -[eva:alarm] tests/value/summary.i:32: Warning: - signed overflow. assert undet << undet ≤ 2147483647; [eva:alarm] tests/value/summary.i:33: Warning: - non-finite double value. assert \is_finite(volatile_d); + signed overflow. assert undet << undet ≤ 2147483647; [eva:alarm] tests/value/summary.i:34: Warning: - non-finite double value. assert \is_finite((double)(d - d)); + non-finite double value. assert \is_finite(volatile_d); [eva:alarm] tests/value/summary.i:35: Warning: + non-finite double value. assert \is_finite((double)(d - d)); +[eva:alarm] tests/value/summary.i:36: Warning: overflow in conversion from floating-point to integer. assert -2147483649 < d; -[eva:alarm] tests/value/summary.i:35: Warning: +[eva:alarm] tests/value/summary.i:36: Warning: overflow in conversion from floating-point to integer. assert d < 2147483648; -[eva:alarm] tests/value/summary.i:38: Warning: - pointer subtraction. assert \base_addr(p) ≡ \base_addr(q); [eva:alarm] tests/value/summary.i:39: Warning: + pointer subtraction. assert \base_addr(p) ≡ \base_addr(q); +[eva:alarm] tests/value/summary.i:40: Warning: pointer comparison. assert \pointer_comparable((void *)p, (void *)q); -[eva:locals-escaping] tests/value/summary.i:42: Warning: +[eva:locals-escaping] tests/value/summary.i:43: Warning: locals {z} escaping the scope of a block of alarms through p -[eva:alarm] tests/value/summary.i:44: Warning: +[eva:alarm] tests/value/summary.i:45: Warning: accessing left-value that contains escaping addresses. assert ¬\dangling(&p); [eva] Recording results for alarms [eva] Done for function alarms [eva] computing for function f <- main. - Called from tests/value/summary.i:53. -[kernel:annot:missing-spec] tests/value/summary.i:53: Warning: + Called from tests/value/summary.i:54. +[kernel:annot:missing-spec] tests/value/summary.i:54: Warning: Neither code nor specification for function f, generating default assigns from the prototype [eva] using specification for function f [eva] Done for function f [eva] computing for function g <- main. - Called from tests/value/summary.i:54. -[kernel:annot:missing-spec] tests/value/summary.i:54: Warning: + Called from tests/value/summary.i:55. +[kernel:annot:missing-spec] tests/value/summary.i:55: Warning: Neither code nor specification for function g, generating default assigns from the prototype [eva] using specification for function g [eva] Done for function g diff --git a/tests/value/oracle/summary.4.res.oracle b/tests/value/oracle/summary.4.res.oracle new file mode 100644 index 00000000000..507036d92ab --- /dev/null +++ b/tests/value/oracle/summary.4.res.oracle @@ -0,0 +1,141 @@ +[kernel] Parsing tests/value/summary.i (no preprocessing) +[rte] annotating function alarms +[rte] annotating function bottom +[rte] tests/value/summary.i:15: Warning: + guaranteed RTE: assert division_by_zero: 0 ≢ 0; +[rte] annotating function main +[rte] annotating function minimal +[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 ∈ [--..--] + volatile_d ∈ [--..--] +[eva] computing for function alarms <- main. + Called from tests/value/summary.i:53. +[eva:alarm] tests/value/summary.i:27: Warning: + assertion 'rte,mem_access' got status unknown. +[eva:alarm] tests/value/summary.i:29: Warning: + assertion 'rte,mem_access' got status unknown. +[eva:alarm] tests/value/summary.i:30: Warning: + assertion 'rte,index_bound' got status unknown. +[eva:alarm] tests/value/summary.i:30: Warning: + accessing out of bounds index. assert 0 ≤ undet; +[eva:alarm] tests/value/summary.i:30: Warning: + accessing out of bounds index. assert undet < 10; +[eva:alarm] tests/value/summary.i:31: Warning: + assertion 'rte,division_by_zero' got status unknown. +[eva:alarm] tests/value/summary.i:31: Warning: + division by zero. assert undet ≢ 0; +[eva:alarm] tests/value/summary.i:32: Warning: + assertion 'rte,signed_overflow' got status unknown. +[eva:alarm] tests/value/summary.i:32: Warning: + signed overflow. assert -2147483648 ≤ undet + undet; +[eva:alarm] tests/value/summary.i:32: Warning: + signed overflow. assert undet + undet ≤ 2147483647; +[eva:alarm] tests/value/summary.i:33: Warning: + assertion 'rte,shift' got status unknown. +[eva:alarm] tests/value/summary.i:33: Warning: + assertion 'rte,shift' got status unknown. +[eva:alarm] tests/value/summary.i:33: Warning: + assertion 'rte,signed_overflow' got status unknown. +[eva:alarm] tests/value/summary.i:33: Warning: + invalid LHS operand for left shift. assert 0 ≤ undet; +[eva:alarm] tests/value/summary.i:33: Warning: + invalid RHS operand for shift. assert 0 ≤ undet < 32; +[eva:alarm] tests/value/summary.i:33: Warning: + signed overflow. assert undet << undet ≤ 2147483647; +[eva:alarm] tests/value/summary.i:34: Warning: + non-finite double value. assert \is_finite(volatile_d); +[eva:alarm] tests/value/summary.i:35: Warning: + assertion 'rte,is_nan_or_infinite' got status unknown. +[eva:alarm] tests/value/summary.i:35: Warning: + non-finite double value. assert \is_finite((double)(d - d)); +[eva:alarm] tests/value/summary.i:36: Warning: + assertion 'rte,float_to_int' got status unknown. +[eva:alarm] tests/value/summary.i:39: Warning: + pointer subtraction. assert \base_addr(p) ≡ \base_addr(q); +[eva:alarm] tests/value/summary.i:40: Warning: + pointer comparison. assert \pointer_comparable((void *)p, (void *)q); +[eva:locals-escaping] tests/value/summary.i:43: Warning: + locals {z} escaping the scope of a block of alarms through p +[eva:alarm] tests/value/summary.i:45: Warning: + assertion 'rte,mem_access' got status unknown. +[eva:alarm] tests/value/summary.i:45: Warning: + accessing left-value that contains escaping addresses. + assert ¬\dangling(&p); +[eva] Recording results for alarms +[eva] Done for function alarms +[eva] computing for function f <- main. + Called from tests/value/summary.i:54. +[kernel:annot:missing-spec] tests/value/summary.i:54: Warning: + Neither code nor specification for function f, generating default assigns from the prototype +[eva] using specification for function f +[eva] Done for function f +[eva] computing for function g <- main. + Called from tests/value/summary.i:55. +[kernel:annot:missing-spec] tests/value/summary.i:55: Warning: + Neither code nor specification for function g, generating default assigns from the prototype +[eva] using specification for function g +[eva] Done for function g +[eva] Recording results for main +[eva] done for function main +[eva] ====== VALUES COMPUTED ====== +[eva:final-states] Values at end of function alarms: + x ∈ [--..--] + y ∈ {0} + p ∈ {{ &x ; &y }} + q ∈ {{ &x ; &y }} + t[0..9] ∈ {0} + d ∈ [-2147483649. .. 2147483648.] +[eva:final-states] Values at end of function main: + +[eva:summary] ====== ANALYSIS SUMMARY ====== + ---------------------------------------------------------------------------- + 2 functions analyzed (out of 4): 50% coverage. + In these functions, 32 statements reached (out of 32): 100% coverage. + ---------------------------------------------------------------------------- + Some errors and warnings have been raised during the analysis: + by the Eva analyzer: 0 errors 1 warning + by the Frama-C kernel: 0 errors 2 warnings + ---------------------------------------------------------------------------- + 18 alarms generated by the analysis: + 1 division by zero + 3 invalid memory accesses + 2 accesses out of bounds index + 3 integer overflows + 2 invalid shifts + 1 escaping address + 2 nan or infinite floating-point values + 2 illegal conversions from floating-point to integer + 2 others + ---------------------------------------------------------------------------- + No logical properties have been reached by the analysis. + ---------------------------------------------------------------------------- +[from] Computing for function alarms +[from] Done for function alarms +[from] Computing for function main +[from] Computing for function f <-main +[from] Done for function f +[from] Computing for function g <-main +[from] Done for function g +[from] Done for function main +[from] ====== DEPENDENCIES COMPUTED ====== + These dependencies hold at termination for the executions that terminate: +[from] Function alarms: + NO EFFECTS +[from] Function f: + NO EFFECTS +[from] Function g: + NO EFFECTS +[from] Function main: + NO EFFECTS +[from] ====== END OF DEPENDENCIES ====== +[inout] Out (internal) for function alarms: + x; y; p; q; t[0..9]; d +[inout] Inputs for function alarms: + undet; volatile_d +[inout] Out (internal) for function main: + \nothing +[inout] Inputs for function main: + undet; volatile_d diff --git a/tests/value/summary.i b/tests/value/summary.i index b037fa17050..96ea72f491b 100644 --- a/tests/value/summary.i +++ b/tests/value/summary.i @@ -3,6 +3,7 @@ STDOPT: +"-eva-msg-key=summary -main minimal" STDOPT: +"-eva-msg-key=summary -main bottom" STDOPT: +"-eva-msg-key=summary -main main" + STDOPT: +"-rte -eva-msg-key=summary -main main" */ /* Tests the summary on the smallest possible program. */ -- GitLab