From ca3715f7e39e7769c1a491e9003e0e247e75fa43 Mon Sep 17 00:00:00 2001 From: Thibaut Benjamin <thibaut.benjamin@gmail.com> Date: Mon, 23 May 2022 14:33:19 +0200 Subject: [PATCH] [e-acsl] add quantification over enum types --- src/plugins/e-acsl/src/analyses/typing.ml | 3 +- .../e-acsl/tests/arith/oracle/gen_quantif.c | 85 ++++++++++++++----- .../tests/arith/oracle/quantif.res.oracle | 58 ++++++------- src/plugins/e-acsl/tests/arith/quantif.i | 4 + 4 files changed, 97 insertions(+), 53 deletions(-) diff --git a/src/plugins/e-acsl/src/analyses/typing.ml b/src/plugins/e-acsl/src/analyses/typing.ml index b83df3af03d..b3cb3df086f 100644 --- a/src/plugins/e-acsl/src/analyses/typing.ml +++ b/src/plugins/e-acsl/src/analyses/typing.ml @@ -751,7 +751,8 @@ and type_bound_variables ~loc ~lenv (t1, lv, t2) = | Linteger -> mk_ctx ~use_gmp_opt:true (ty_of_interv ~ctx:Gmpz i) | Ctype ty -> (match Cil.unrollType ty with - | TInt(ik, _) -> mk_ctx ~use_gmp_opt:true (C_integer ik) + | TInt(ik, _) | TEnum({ ekind = ik }, _) -> + mk_ctx ~use_gmp_opt:true (C_integer ik) | ty -> Options.fatal "unexpected C type %a for quantified variable %a" Printer.pp_typ ty diff --git a/src/plugins/e-acsl/tests/arith/oracle/gen_quantif.c b/src/plugins/e-acsl/tests/arith/oracle/gen_quantif.c index 6a2abd1e2af..9ac7afd8b8e 100644 --- a/src/plugins/e-acsl/tests/arith/oracle/gen_quantif.c +++ b/src/plugins/e-acsl/tests/arith/oracle/gen_quantif.c @@ -8,6 +8,10 @@ #include "time.h" extern __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict; +enum RIGHT { + CREATE = 0, + DELETE = 1 +}; /*@ predicate p1(integer i, integer j, integer k) = 0 <= i < 10 && 1 < j <= 11 && 2 <= k <= 12; @@ -64,7 +68,7 @@ int main(void) __gen_e_acsl_assert_data.pred_txt = "\\forall integer x; 0 <= x <= 1 ==> x == 0 || x == 1"; __gen_e_acsl_assert_data.file = "quantif.i"; __gen_e_acsl_assert_data.fct = "main"; - __gen_e_acsl_assert_data.line = 16; + __gen_e_acsl_assert_data.line = 17; __e_acsl_assert(__gen_e_acsl_forall,& __gen_e_acsl_assert_data); __e_acsl_assert_clean(& __gen_e_acsl_assert_data); } @@ -94,7 +98,7 @@ int main(void) __gen_e_acsl_assert_data_2.pred_txt = "\\forall integer x; 0 < x <= 1 ==> x == 1"; __gen_e_acsl_assert_data_2.file = "quantif.i"; __gen_e_acsl_assert_data_2.fct = "main"; - __gen_e_acsl_assert_data_2.line = 17; + __gen_e_acsl_assert_data_2.line = 18; __e_acsl_assert(__gen_e_acsl_forall_2,& __gen_e_acsl_assert_data_2); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2); } @@ -124,7 +128,7 @@ int main(void) __gen_e_acsl_assert_data_3.pred_txt = "\\forall integer x; 0 <= x < 1 ==> x == 0"; __gen_e_acsl_assert_data_3.file = "quantif.i"; __gen_e_acsl_assert_data_3.fct = "main"; - __gen_e_acsl_assert_data_3.line = 18; + __gen_e_acsl_assert_data_3.line = 19; __e_acsl_assert(__gen_e_acsl_forall_3,& __gen_e_acsl_assert_data_3); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3); } @@ -167,7 +171,7 @@ int main(void) __gen_e_acsl_assert_data_4.pred_txt = "\\forall integer x, integer y, integer z;\n 0 <= x < 2 && 0 <= y < 5 && 0 <= z <= y ==> x + z <= y + 1"; __gen_e_acsl_assert_data_4.file = "quantif.i"; __gen_e_acsl_assert_data_4.fct = "main"; - __gen_e_acsl_assert_data_4.line = 22; + __gen_e_acsl_assert_data_4.line = 23; __e_acsl_assert(__gen_e_acsl_forall_4,& __gen_e_acsl_assert_data_4); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4); } @@ -202,7 +206,7 @@ int main(void) __gen_e_acsl_assert_data_5.pred_txt = "\\exists int x; 0 <= x < 10 && x == 5"; __gen_e_acsl_assert_data_5.file = "quantif.i"; __gen_e_acsl_assert_data_5.fct = "main"; - __gen_e_acsl_assert_data_5.line = 27; + __gen_e_acsl_assert_data_5.line = 28; __e_acsl_assert(__gen_e_acsl_exists,& __gen_e_acsl_assert_data_5); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5); } @@ -253,7 +257,7 @@ int main(void) __gen_e_acsl_assert_data_6.pred_txt = "\\forall int x;\n 0 <= x < 10 ==>\n x % 2 == 0 ==> (\\exists integer y; 0 <= y <= x / 2 && x == 2 * y)"; __gen_e_acsl_assert_data_6.file = "quantif.i"; __gen_e_acsl_assert_data_6.fct = "main"; - __gen_e_acsl_assert_data_6.line = 31; + __gen_e_acsl_assert_data_6.line = 32; __e_acsl_assert(__gen_e_acsl_forall_5,& __gen_e_acsl_assert_data_6); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6); } @@ -324,7 +328,7 @@ int main(void) __gen_e_acsl_assert_data_7.pred_txt = "\\forall int x;\n 0 <= x < 10 ==>\n (\\forall int y; 10 <= y < 20 ==> x <= y) &&\n (\\forall int y; -10 <= y < 0 ==> y <= x)"; __gen_e_acsl_assert_data_7.file = "quantif.i"; __gen_e_acsl_assert_data_7.fct = "main"; - __gen_e_acsl_assert_data_7.line = 36; + __gen_e_acsl_assert_data_7.line = 37; __e_acsl_assert(__gen_e_acsl_forall_6,& __gen_e_acsl_assert_data_7); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7); } @@ -371,7 +375,7 @@ int main(void) __gen_e_acsl_assert_data_8.pred_txt = "\\forall integer i; 0 <= i < 10 ==> \\valid(&buf[i])"; __gen_e_acsl_assert_data_8.file = "quantif.i"; __gen_e_acsl_assert_data_8.fct = "main"; - __gen_e_acsl_assert_data_8.line = 43; + __gen_e_acsl_assert_data_8.line = 44; __e_acsl_assert(__gen_e_acsl_forall_9,& __gen_e_acsl_assert_data_8); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8); } @@ -407,7 +411,7 @@ int main(void) __gen_e_acsl_assert_data_9.pred_txt = "\\forall char i; 0 <= i < 10 ==> \\valid(&buf[i])"; __gen_e_acsl_assert_data_9.file = "quantif.i"; __gen_e_acsl_assert_data_9.fct = "main"; - __gen_e_acsl_assert_data_9.line = 44; + __gen_e_acsl_assert_data_9.line = 45; __e_acsl_assert(__gen_e_acsl_forall_10,& __gen_e_acsl_assert_data_9); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_9); } @@ -443,7 +447,7 @@ int main(void) __gen_e_acsl_assert_data_10.pred_txt = "\\forall integer i; 0 <= i < len ==> \\valid(&buf[i])"; __gen_e_acsl_assert_data_10.file = "quantif.i"; __gen_e_acsl_assert_data_10.fct = "main"; - __gen_e_acsl_assert_data_10.line = 45; + __gen_e_acsl_assert_data_10.line = 46; __e_acsl_assert(__gen_e_acsl_forall_11,& __gen_e_acsl_assert_data_10); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_10); } @@ -508,7 +512,7 @@ int main(void) __gen_e_acsl_assert_data_11.pred_txt = "\\forall integer i; 0 <= i <= len ==> \\valid(&buf[i])"; __gen_e_acsl_assert_data_11.file = "quantif.i"; __gen_e_acsl_assert_data_11.fct = "main"; - __gen_e_acsl_assert_data_11.line = 46; + __gen_e_acsl_assert_data_11.line = 47; __e_acsl_assert(__gen_e_acsl_forall_12,& __gen_e_acsl_assert_data_11); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_11); __gmpz_clear(__gen_e_acsl_i_4); @@ -524,7 +528,7 @@ int main(void) __gen_e_acsl_assert_data_12.pred_txt = "\\forall integer x; 0 < x < 1 ==> \\false"; __gen_e_acsl_assert_data_12.file = "quantif.i"; __gen_e_acsl_assert_data_12.fct = "main"; - __gen_e_acsl_assert_data_12.line = 50; + __gen_e_acsl_assert_data_12.line = 51; __e_acsl_assert(1,& __gen_e_acsl_assert_data_12); } /*@ assert \forall integer x; 0 < x < 1 ==> \false; */ ; @@ -536,7 +540,7 @@ int main(void) __gen_e_acsl_assert_data_13.pred_txt = "!(\\exists char c; 10 <= c < 10 && c == 10)"; __gen_e_acsl_assert_data_13.file = "quantif.i"; __gen_e_acsl_assert_data_13.fct = "main"; - __gen_e_acsl_assert_data_13.line = 51; + __gen_e_acsl_assert_data_13.line = 52; __e_acsl_assert(1,& __gen_e_acsl_assert_data_13); } /*@ assert !(\exists char c; 10 <= c < 10 && c == 10); */ ; @@ -550,7 +554,7 @@ int main(void) __gen_e_acsl_assert_data_14.pred_txt = "\\let u = 5;\n\\forall integer x, integer y; 0 <= x < 2 && 4 < y < u ==> \\false"; __gen_e_acsl_assert_data_14.file = "quantif.i"; __gen_e_acsl_assert_data_14.fct = "main"; - __gen_e_acsl_assert_data_14.line = 53; + __gen_e_acsl_assert_data_14.line = 54; __e_acsl_assert(1,& __gen_e_acsl_assert_data_14); } /*@ @@ -600,7 +604,7 @@ int main(void) __gen_e_acsl_assert_data_15.pred_txt = "\\forall integer i, integer j, integer k;\n 0 <= i < 10 && 1 < j <= 11 && 2 <= k <= 12 ==> p1(i, j, k)"; __gen_e_acsl_assert_data_15.file = "quantif.i"; __gen_e_acsl_assert_data_15.fct = "main"; - __gen_e_acsl_assert_data_15.line = 59; + __gen_e_acsl_assert_data_15.line = 60; __gen_e_acsl_assert_data_15.name = "forall_multiple_binders_1"; __e_acsl_assert(__gen_e_acsl_forall_13,& __gen_e_acsl_assert_data_15); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_15); @@ -655,7 +659,7 @@ int main(void) __gen_e_acsl_assert_data_16.pred_txt = "\\forall integer i, integer j, integer k;\n 0 <= i <= j < k <= 10 ==> p2(i, j, k)"; __gen_e_acsl_assert_data_16.file = "quantif.i"; __gen_e_acsl_assert_data_16.fct = "main"; - __gen_e_acsl_assert_data_16.line = 62; + __gen_e_acsl_assert_data_16.line = 63; __gen_e_acsl_assert_data_16.name = "forall_multiple_binders_2"; __e_acsl_assert(__gen_e_acsl_forall_14,& __gen_e_acsl_assert_data_16); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_16); @@ -710,7 +714,7 @@ int main(void) __gen_e_acsl_assert_data_17.pred_txt = "\\forall integer i, integer j, integer k;\n 0 <= i < j <= 10 && 1 < k < 11 ==> p3(i, j, k)"; __gen_e_acsl_assert_data_17.file = "quantif.i"; __gen_e_acsl_assert_data_17.fct = "main"; - __gen_e_acsl_assert_data_17.line = 65; + __gen_e_acsl_assert_data_17.line = 66; __gen_e_acsl_assert_data_17.name = "forall_multiple_binders_3"; __e_acsl_assert(__gen_e_acsl_forall_15,& __gen_e_acsl_assert_data_17); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_17); @@ -765,7 +769,7 @@ int main(void) __gen_e_acsl_assert_data_18.pred_txt = "\\forall integer i, integer j, integer k;\n 0 <= i < 10 ==> 1 < j <= 11 ==> 2 <= k <= 12 ==> p1(i, j, k)"; __gen_e_acsl_assert_data_18.file = "quantif.i"; __gen_e_acsl_assert_data_18.fct = "main"; - __gen_e_acsl_assert_data_18.line = 68; + __gen_e_acsl_assert_data_18.line = 69; __gen_e_acsl_assert_data_18.name = "forall_multiple_binders_4"; __e_acsl_assert(__gen_e_acsl_forall_16,& __gen_e_acsl_assert_data_18); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_18); @@ -820,7 +824,7 @@ int main(void) __gen_e_acsl_assert_data_19.pred_txt = "\\forall integer i, integer j, integer k;\n 0 <= i <= k <= 10 && 1 <= j < k ==> p4(i, j, k)"; __gen_e_acsl_assert_data_19.file = "quantif.i"; __gen_e_acsl_assert_data_19.fct = "main"; - __gen_e_acsl_assert_data_19.line = 71; + __gen_e_acsl_assert_data_19.line = 72; __gen_e_acsl_assert_data_19.name = "forall_unordered_binders"; __e_acsl_assert(__gen_e_acsl_forall_17,& __gen_e_acsl_assert_data_19); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_19); @@ -875,7 +879,7 @@ int main(void) __gen_e_acsl_assert_data_20.pred_txt = "\\exists integer i, integer j, integer k;\n 0 <= i < 10 && 1 < j <= 11 && 2 <= k <= 12 && p1(i, j, k)"; __gen_e_acsl_assert_data_20.file = "quantif.i"; __gen_e_acsl_assert_data_20.fct = "main"; - __gen_e_acsl_assert_data_20.line = 74; + __gen_e_acsl_assert_data_20.line = 75; __gen_e_acsl_assert_data_20.name = "exists_multiple_binders_1"; __e_acsl_assert(__gen_e_acsl_exists_3,& __gen_e_acsl_assert_data_20); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_20); @@ -930,7 +934,7 @@ int main(void) __gen_e_acsl_assert_data_21.pred_txt = "\\exists integer i, integer j, integer k; 0 <= i <= j < k <= 10 && p2(i, j, k)"; __gen_e_acsl_assert_data_21.file = "quantif.i"; __gen_e_acsl_assert_data_21.fct = "main"; - __gen_e_acsl_assert_data_21.line = 77; + __gen_e_acsl_assert_data_21.line = 78; __gen_e_acsl_assert_data_21.name = "exists_multiple_binders_2"; __e_acsl_assert(__gen_e_acsl_exists_4,& __gen_e_acsl_assert_data_21); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_21); @@ -985,7 +989,7 @@ int main(void) __gen_e_acsl_assert_data_22.pred_txt = "\\exists integer i, integer j, integer k;\n 0 <= i < j <= 10 && 1 < k < 11 && p3(i, j, k)"; __gen_e_acsl_assert_data_22.file = "quantif.i"; __gen_e_acsl_assert_data_22.fct = "main"; - __gen_e_acsl_assert_data_22.line = 80; + __gen_e_acsl_assert_data_22.line = 81; __gen_e_acsl_assert_data_22.name = "exists_multiple_binders_3"; __e_acsl_assert(__gen_e_acsl_exists_5,& __gen_e_acsl_assert_data_22); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_22); @@ -1040,7 +1044,7 @@ int main(void) __gen_e_acsl_assert_data_23.pred_txt = "\\exists integer i, integer j, integer k;\n 0 <= i <= k <= 10 && 1 <= j < k && p4(i, j, k)"; __gen_e_acsl_assert_data_23.file = "quantif.i"; __gen_e_acsl_assert_data_23.fct = "main"; - __gen_e_acsl_assert_data_23.line = 83; + __gen_e_acsl_assert_data_23.line = 84; __gen_e_acsl_assert_data_23.name = "exists_unordered_binders"; __e_acsl_assert(__gen_e_acsl_exists_6,& __gen_e_acsl_assert_data_23); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_23); @@ -1115,6 +1119,41 @@ int main(void) 0 <= i < 10 && 2 <= i < 8 && 4 <= j < 6 ==> p1(i, j, 2); */ ; + { + int __gen_e_acsl_forall_18; + int __gen_e_acsl_r; + __e_acsl_assert_data_t __gen_e_acsl_assert_data_35 = + {.values = (void *)0}; + __gen_e_acsl_forall_18 = 1; + __gen_e_acsl_r = 0U; + while (1) { + if (__gen_e_acsl_r < 1) ; else break; + { + int __gen_e_acsl_and_18; + if (1 <= __gen_e_acsl_r + 1) __gen_e_acsl_and_18 = __gen_e_acsl_r + 1 < 2; + else __gen_e_acsl_and_18 = 0; + if (__gen_e_acsl_and_18) ; + else { + __gen_e_acsl_forall_18 = 0; + goto e_acsl_end_loop24; + } + } + __gen_e_acsl_r ++; + } + e_acsl_end_loop24: ; + __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_35, + "\\forall enum RIGHT r; 0 <= r < 1 ==> 1 <= r + 1 < 2", + 0,__gen_e_acsl_forall_18); + __gen_e_acsl_assert_data_35.blocking = 1; + __gen_e_acsl_assert_data_35.kind = "Assertion"; + __gen_e_acsl_assert_data_35.pred_txt = "\\forall enum RIGHT r; 0 <= r < 1 ==> 1 <= r + 1 < 2"; + __gen_e_acsl_assert_data_35.file = "quantif.i"; + __gen_e_acsl_assert_data_35.fct = "main"; + __gen_e_acsl_assert_data_35.line = 112; + __e_acsl_assert(__gen_e_acsl_forall_18,& __gen_e_acsl_assert_data_35); + __e_acsl_assert_clean(& __gen_e_acsl_assert_data_35); + } + /*@ assert \forall enum RIGHT r; 0 <= r < 1 ==> 1 <= r + 1 < 2; */ ; __retres = 0; __e_acsl_memory_clean(); return __retres; diff --git a/src/plugins/e-acsl/tests/arith/oracle/quantif.res.oracle b/src/plugins/e-acsl/tests/arith/oracle/quantif.res.oracle index 5266a21d44a..975e9069daf 100644 --- a/src/plugins/e-acsl/tests/arith/oracle/quantif.res.oracle +++ b/src/plugins/e-acsl/tests/arith/oracle/quantif.res.oracle @@ -1,11 +1,11 @@ [e-acsl] beginning translation. -[e-acsl] quantif.i:88: Warning: +[e-acsl] quantif.i:89: Warning: invalid E-ACSL construct `invalid guard 10 > i in quantification failed_invalid_guards: \forall integer i; 10 > i >= 0 ==> p1(i, 2, 2). Missing guard for i. Only < and <= are allowed to guard quantifier variables'. Ignoring annotation. -[e-acsl] quantif.i:90: Warning: +[e-acsl] quantif.i:91: Warning: invalid E-ACSL construct `invalid guard p1(i, j, k) in quantification failed_unguarded_k: @@ -13,58 +13,58 @@ 0 <= i < 10 && 1 < j <= 11 ==> p1(i, j, k). Missing guard for k. '. Ignoring annotation. -[e-acsl] quantif.i:92: Warning: +[e-acsl] quantif.i:93: Warning: E-ACSL construct `non integer variable i in quantification failed_non_integer: \forall real i; 0 <= i < 10 ==> p1(\truncate(i), 2, 2)' is not yet supported. Ignoring annotation. -[e-acsl] quantif.i:94: Warning: +[e-acsl] quantif.i:95: Warning: invalid E-ACSL construct `missing lower bound for i in quantification failed_missing_lower_bound: \forall integer i; i < 10 ==> p1(i, 2, 2)'. Ignoring annotation. -[e-acsl] quantif.i:96: Warning: +[e-acsl] quantif.i:97: Warning: invalid E-ACSL construct `invalid guard p1(i, 2, 2) in quantification failded_missing_upper_bound: \forall integer i; 0 <= i ==> p1(i, 2, 2). Missing upper bound for i. '. Ignoring annotation. -[e-acsl] quantif.i:98: Warning: +[e-acsl] quantif.i:99: Warning: invalid E-ACSL construct `invalid guard p1(i, j, 2) in quantification failed_invalid_upper_bound_1: \forall integer i, integer j; 0 <= i < j ==> p1(i, j, 2). Missing upper bound for j. '. Ignoring annotation. -[e-acsl] quantif.i:100: Warning: +[e-acsl] quantif.i:101: Warning: invalid E-ACSL construct `missing lower bound for i when processing the linked upper bound i < j in quantification failed_invalid_upper_bound_2: \forall integer i, integer j; i < j && 0 <= i ==> p1(i, 2, 2)'. Ignoring annotation. -[e-acsl] quantif.i:102: Warning: +[e-acsl] quantif.i:103: Warning: invalid E-ACSL construct `found existing lower bound i < j when processing 3 <= j in quantification failed_extra_constraint: \forall integer i, integer j; 0 <= i < j && i < 10 && 3 <= j < 5 ==> p1(i, j, 2)'. Ignoring annotation. -[e-acsl] quantif.i:104: Warning: +[e-acsl] quantif.i:105: Warning: invalid E-ACSL construct `found existing lower bound 0 <= i when processing j < i in quantification failed_multiple_upper_bounds: \forall integer i, integer j; 0 <= i < j < i && j <= 10 ==> p1(i, j, 2)'. Ignoring annotation. -[e-acsl] quantif.i:106: Warning: +[e-acsl] quantif.i:107: Warning: invalid E-ACSL construct `found existing lower bound i < k when processing j < k in quantification multiple_linked_upper: \forall integer i, integer j, integer k; 0 <= i < k && 1 <= j < k && 2 <= k < 10 ==> p1(i, j, k)'. Ignoring annotation. -[e-acsl] quantif.i:108: Warning: +[e-acsl] quantif.i:109: Warning: invalid E-ACSL construct `invalid constraint 2 <= i, both operands are constants or already bounded in quantification multiple_guard: @@ -72,36 +72,36 @@ 0 <= i < 10 && 2 <= i < 8 && 4 <= j < 6 ==> p1(i, j, 2)'. Ignoring annotation. [e-acsl] translation done in project "e-acsl". -[eva:alarm] quantif.i:22: Warning: assertion got status unknown. -[eva:alarm] quantif.i:31: Warning: assertion got status unknown. -[eva:alarm] quantif.i:46: Warning: +[eva:alarm] quantif.i:23: Warning: assertion got status unknown. +[eva:alarm] quantif.i:32: Warning: assertion got status unknown. +[eva:alarm] quantif.i:47: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. -[eva:alarm] quantif.i:53: Warning: assertion got status unknown. -[eva:alarm] quantif.i:62: Warning: +[eva:alarm] quantif.i:54: Warning: assertion got status unknown. +[eva:alarm] quantif.i:63: Warning: assertion 'forall_multiple_binders_2' got status unknown. -[eva:alarm] quantif.i:65: Warning: +[eva:alarm] quantif.i:66: Warning: assertion 'forall_multiple_binders_3' got status unknown. -[eva:alarm] quantif.i:71: Warning: +[eva:alarm] quantif.i:72: Warning: assertion 'forall_unordered_binders' got status unknown. -[eva:alarm] quantif.i:77: Warning: +[eva:alarm] quantif.i:78: Warning: assertion 'exists_multiple_binders_2' got status unknown. -[eva:alarm] quantif.i:80: Warning: +[eva:alarm] quantif.i:81: Warning: assertion 'exists_multiple_binders_3' got status unknown. -[eva:alarm] quantif.i:83: Warning: +[eva:alarm] quantif.i:84: Warning: assertion 'exists_unordered_binders' got status unknown. -[eva:alarm] quantif.i:90: Warning: +[eva:alarm] quantif.i:91: Warning: assertion 'failed_unguarded_k' got status unknown. -[eva:alarm] quantif.i:92: Warning: +[eva:alarm] quantif.i:93: Warning: assertion 'failed_non_integer' got status unknown. -[eva:alarm] quantif.i:94: Warning: +[eva:alarm] quantif.i:95: Warning: assertion 'failed_missing_lower_bound' got status unknown. -[eva:alarm] quantif.i:96: Warning: +[eva:alarm] quantif.i:97: Warning: assertion 'failded_missing_upper_bound' got status unknown. -[eva:alarm] quantif.i:98: Warning: +[eva:alarm] quantif.i:99: Warning: assertion 'failed_invalid_upper_bound_1' got status unknown. -[eva:alarm] quantif.i:100: Warning: +[eva:alarm] quantif.i:101: Warning: assertion 'failed_invalid_upper_bound_2' got status unknown. -[eva:alarm] quantif.i:104: Warning: +[eva:alarm] quantif.i:105: Warning: assertion 'failed_multiple_upper_bounds' got status unknown. -[eva:alarm] quantif.i:106: Warning: +[eva:alarm] quantif.i:107: Warning: assertion 'multiple_linked_upper' got status unknown. diff --git a/src/plugins/e-acsl/tests/arith/quantif.i b/src/plugins/e-acsl/tests/arith/quantif.i index 01e7d232228..47edbd62c8f 100644 --- a/src/plugins/e-acsl/tests/arith/quantif.i +++ b/src/plugins/e-acsl/tests/arith/quantif.i @@ -2,6 +2,7 @@ COMMENT: quantifiers STDOPT: +"-eva-min-loop-unroll=15" */ +typedef enum RIGHT { CREATE, DELETE } right; // Support predicates for some tests //@ predicate p1(integer i, integer j, integer k) = 0 <= i < 10 && 1 < j <= 11 && 2 <= k <= 12; @@ -107,5 +108,8 @@ int main(void) { /*@ assert multiple_guard: \forall integer i,j; 0 <= i < 10 && 2 <= i < 8 && 4 <= j < 6 ==> p1(i,j,2); */ + // Gitlab issue e-acsl#199 + /*@ assert \forall right r; 0 <= r < 1 ==> 1 <= r+1 < 2; */ + return 0; } -- GitLab