From 57a28d8882e3313bf1a9d73a00d9b865a7d54116 Mon Sep 17 00:00:00 2001
From: Basile Desloges <basile.desloges@cea.fr>
Date: Tue, 28 Jul 2020 14:20:27 +0200
Subject: [PATCH] [eacsl] Update div by zero guard to not use `~reverse:true`

---
 .../e-acsl/src/code_generator/translate.ml    |  8 ++---
 .../e-acsl/tests/arith/oracle_ci/gen_arith.c  | 10 +++---
 .../tests/arith/oracle_ci/gen_longlong.c      |  4 +--
 .../tests/gmp-only/oracle_ci/gen_arith.c      | 32 +++++++++----------
 4 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/src/plugins/e-acsl/src/code_generator/translate.ml b/src/plugins/e-acsl/src/code_generator/translate.ml
index 341cd3d6f56..4e310e1b4ad 100644
--- a/src/plugins/e-acsl/src/code_generator/translate.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate.ml
@@ -364,19 +364,19 @@ and context_insensitive_term_to_exp kf env t =
       let guard, env =
         let name = Misc.name_of_binop bop ^ "_guard" in
         comparison_to_exp
-          ~loc kf env Typing.gmpz ~e1:e2 ~name Eq t2 zero t
+          ~loc kf env Typing.gmpz ~e1:e2 ~name Ne t2 zero t
       in
+      let p = Logic_const.prel ~loc (Rneq, t2, zero) in
       let mk_stmts _v e =
         assert (Gmp_types.Z.is_t ty);
         let cond =
           Constructor.mk_runtime_check
-            ~reverse:true
             (Env.annotation_kind env)
             kf
             guard
-            (Logic_const.prel ~loc (Req, t2, zero))
+            p
         in
-        Env.add_assert kf cond (Logic_const.prel (Rneq, t2, zero));
+        Env.add_assert kf cond p;
         let instr = Constructor.mk_lib_call ~loc name [ e; e1; e2 ] in
         [ cond; instr ]
       in
diff --git a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_arith.c b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_arith.c
index 2dd0194bc1b..249a2e33666 100644
--- a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_arith.c
+++ b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_arith.c
@@ -39,9 +39,8 @@ int main(void)
                                         (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
     __gmpz_init(__gen_e_acsl_div);
     /*@ assert E_ACSL: 0xffffffffffffffffffffff ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_div_guard == 0),"Assertion","main",
-                    "!(0xffffffffffffffffffffff == 0)","tests/arith/arith.i",
-                    18);
+    __e_acsl_assert(__gen_e_acsl_div_guard != 0,"Assertion","main",
+                    "0xffffffffffffffffffffff != 0","tests/arith/arith.i",18);
     __gmpz_tdiv_q(__gen_e_acsl_div,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
@@ -109,9 +108,8 @@ int main(void)
                                           (__e_acsl_mpz_struct const *)(__gen_e_acsl__6));
     __gmpz_init(__gen_e_acsl_div_2);
     /*@ assert E_ACSL: y - 123456789123456789 ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_div_guard_2 == 0),"Assertion","main",
-                    "!(y - 123456789123456789 == 0)","tests/arith/arith.i",
-                    34);
+    __e_acsl_assert(__gen_e_acsl_div_guard_2 != 0,"Assertion","main",
+                    "y - 123456789123456789 != 0","tests/arith/arith.i",34);
     __gmpz_tdiv_q(__gen_e_acsl_div_2,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_add),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__5));
diff --git a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_longlong.c b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_longlong.c
index 49e97395390..0720b6503aa 100644
--- a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_longlong.c
+++ b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_longlong.c
@@ -54,8 +54,8 @@ int main(void)
                                         (__e_acsl_mpz_struct const *)(__gen_e_acsl__3));
     __gmpz_init(__gen_e_acsl_mod);
     /*@ assert E_ACSL: 2 ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_mod_guard == 0),"Assertion","main",
-                    "!(2 == 0)","tests/arith/longlong.i",17);
+    __e_acsl_assert(__gen_e_acsl_mod_guard != 0,"Assertion","main","2 != 0",
+                    "tests/arith/longlong.i",17);
     __gmpz_tdiv_r(__gen_e_acsl_mod,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_add),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
diff --git a/src/plugins/e-acsl/tests/gmp-only/oracle_ci/gen_arith.c b/src/plugins/e-acsl/tests/gmp-only/oracle_ci/gen_arith.c
index efc5103682b..9db467e05fc 100644
--- a/src/plugins/e-acsl/tests/gmp-only/oracle_ci/gen_arith.c
+++ b/src/plugins/e-acsl/tests/gmp-only/oracle_ci/gen_arith.c
@@ -160,8 +160,8 @@ int main(void)
                                         (__e_acsl_mpz_struct const *)(__gen_e_acsl__11));
     __gmpz_init(__gen_e_acsl_div);
     /*@ assert E_ACSL: 3 ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_div_guard == 0),"Assertion","main",
-                    "!(3 == 0)","tests/gmp-only/arith.i",17);
+    __e_acsl_assert(__gen_e_acsl_div_guard != 0,"Assertion","main","3 != 0",
+                    "tests/gmp-only/arith.i",17);
     __gmpz_tdiv_q(__gen_e_acsl_div,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_x_6),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__10));
@@ -194,9 +194,9 @@ int main(void)
                                           (__e_acsl_mpz_struct const *)(__gen_e_acsl__14));
     __gmpz_init(__gen_e_acsl_div_2);
     /*@ assert E_ACSL: 0xffffffffffffffffffffff ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_div_guard_2 == 0),"Assertion","main",
-                    "!(0xffffffffffffffffffffff == 0)",
-                    "tests/gmp-only/arith.i",18);
+    __e_acsl_assert(__gen_e_acsl_div_guard_2 != 0,"Assertion","main",
+                    "0xffffffffffffffffffffff != 0","tests/gmp-only/arith.i",
+                    18);
     __gmpz_tdiv_q(__gen_e_acsl_div_2,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__13),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__13));
@@ -228,8 +228,8 @@ int main(void)
                                         (__e_acsl_mpz_struct const *)(__gen_e_acsl__17));
     __gmpz_init(__gen_e_acsl_mod);
     /*@ assert E_ACSL: 2 ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_mod_guard == 0),"Assertion","main",
-                    "!(2 == 0)","tests/gmp-only/arith.i",19);
+    __e_acsl_assert(__gen_e_acsl_mod_guard != 0,"Assertion","main","2 != 0",
+                    "tests/gmp-only/arith.i",19);
     __gmpz_tdiv_r(__gen_e_acsl_mod,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_x_7),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__16));
@@ -273,8 +273,8 @@ int main(void)
                                           (__e_acsl_mpz_struct const *)(__gen_e_acsl__21));
     __gmpz_init(__gen_e_acsl_mod_2);
     /*@ assert E_ACSL: -2 ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_mod_guard_2 == 0),"Assertion","main",
-                    "!(-2 == 0)","tests/gmp-only/arith.i",20);
+    __e_acsl_assert(__gen_e_acsl_mod_guard_2 != 0,"Assertion","main",
+                    "-2 != 0","tests/gmp-only/arith.i",20);
     __gmpz_tdiv_r(__gen_e_acsl_mod_2,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_neg_8),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_neg_9));
@@ -315,8 +315,8 @@ int main(void)
                                           (__e_acsl_mpz_struct const *)(__gen_e_acsl__25));
     __gmpz_init(__gen_e_acsl_mod_3);
     /*@ assert E_ACSL: -2 ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_mod_guard_3 == 0),"Assertion","main",
-                    "!(-2 == 0)","tests/gmp-only/arith.i",21);
+    __e_acsl_assert(__gen_e_acsl_mod_guard_3 != 0,"Assertion","main",
+                    "-2 != 0","tests/gmp-only/arith.i",21);
     __gmpz_tdiv_r(__gen_e_acsl_mod_3,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__23),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_neg_11));
@@ -574,8 +574,8 @@ int main(void)
                                           (__e_acsl_mpz_struct const *)(__gen_e_acsl__55));
     __gmpz_init(__gen_e_acsl_div_3);
     /*@ assert E_ACSL: y ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_div_guard_3 == 0),"Assertion","main",
-                    "!(y == 0)","tests/gmp-only/arith.i",31);
+    __e_acsl_assert(__gen_e_acsl_div_guard_3 != 0,"Assertion","main",
+                    "y != 0","tests/gmp-only/arith.i",31);
     __gmpz_tdiv_q(__gen_e_acsl_div_3,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl__54),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_y_2));
@@ -620,9 +620,9 @@ int main(void)
                                           (__e_acsl_mpz_struct const *)(__gen_e_acsl__59));
     __gmpz_init(__gen_e_acsl_div_4);
     /*@ assert E_ACSL: y - 123456789123456789 ≢ 0; */
-    __e_acsl_assert(! (__gen_e_acsl_div_guard_4 == 0),"Assertion","main",
-                    "!(y - 123456789123456789 == 0)",
-                    "tests/gmp-only/arith.i",34);
+    __e_acsl_assert(__gen_e_acsl_div_guard_4 != 0,"Assertion","main",
+                    "y - 123456789123456789 != 0","tests/gmp-only/arith.i",
+                    34);
     __gmpz_tdiv_q(__gen_e_acsl_div_4,
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_5),
                   (__e_acsl_mpz_struct const *)(__gen_e_acsl_sub_4));
-- 
GitLab