From c26e1a29592bc9dbebb2a14ddc8ef936c6283df6 Mon Sep 17 00:00:00 2001
From: Julien Signoles <julien.signoles@cea.fr>
Date: Wed, 10 Jun 2020 12:29:44 +0200
Subject: [PATCH] [e-acsl] fix soundness bug when initializing rationals from
 integers

---
 .../e-acsl/share/e-acsl/e_acsl_gmp_api.h      |   9 +-
 src/plugins/e-acsl/src/code_generator/gmp.ml  |  19 +-
 src/plugins/e-acsl/src/code_generator/gmp.mli |   2 +-
 .../tests/arith/oracle_ci/gen_functions.c     |  90 +++++-----
 .../tests/arith/oracle_ci/gen_functions_rec.c | 164 +++++++++---------
 .../tests/arith/oracle_ci/gen_rationals.c     |  42 ++++-
 .../arith/oracle_ci/rationals.res.oracle      |   2 +
 src/plugins/e-acsl/tests/arith/rationals.c    |   3 +
 .../e-acsl/tests/bts/oracle_ci/gen_bts1307.c  |   4 +-
 .../tests/gmp-only/oracle_ci/gen_functions.c  | 152 ++++++++--------
 10 files changed, 268 insertions(+), 219 deletions(-)

diff --git a/src/plugins/e-acsl/share/e-acsl/e_acsl_gmp_api.h b/src/plugins/e-acsl/share/e-acsl/e_acsl_gmp_api.h
index 829f7cf15b4..962a72dff8e 100644
--- a/src/plugins/e-acsl/share/e-acsl/e_acsl_gmp_api.h
+++ b/src/plugins/e-acsl/share/e-acsl/e_acsl_gmp_api.h
@@ -145,8 +145,8 @@ extern void __gmpq_set_d(mpq_t q, double d)
   __attribute__((FC_BUILTIN));
 
 /*@ requires \valid(q);
-  @ assigns *q \from n; */
-extern void __gmpq_set_si(mpq_t q, signed long int n)
+  @ assigns *q \from n,d; */
+extern void __gmpq_set_si(mpq_t q, signed long int n, unsigned long int d)
   __attribute__((FC_BUILTIN));
 
 /*@ allocates q;
@@ -158,9 +158,8 @@ extern int __gmpq_set_str(mpq_t q, const char *str, int base)
   __attribute__((FC_BUILTIN));
 
 /*@ requires \valid(z);
-//  @ ensures z->n == n;
-  @ assigns *z \from n; */
-extern void __gmpz_set_ui(mpz_t z, unsigned long int n)
+  @ assigns *z \from n,d; */
+extern void __gmpz_set_ui(mpz_t z, unsigned long int n, unsigned long int d)
   __attribute__((FC_BUILTIN));
 
 /*@ requires \valid(z);
diff --git a/src/plugins/e-acsl/src/code_generator/gmp.ml b/src/plugins/e-acsl/src/code_generator/gmp.ml
index dd373192bd1..89ea82b0bdf 100644
--- a/src/plugins/e-acsl/src/code_generator/gmp.ml
+++ b/src/plugins/e-acsl/src/code_generator/gmp.ml
@@ -40,18 +40,25 @@ let clear ~loc e = apply_on_var "clear" ~loc e
 
 exception Longlong of ikind
 
-let get_set_suffix_and_arg e =
+let get_set_suffix_and_arg res_ty e =
   let ty = Cil.typeOf e in
   if Gmp_types.Z.is_t ty || Gmp_types.Q.is_t ty then "", [ e ]
   else
+    let args_uisi e =
+      if Gmp_types.Z.is_t res_ty then [ e ]
+      else begin
+        assert (Gmp_types.Q.is_t res_ty);
+        [ e; Cil.one ~loc:e.eloc ]
+      end
+    in
     match Cil.unrollType ty with
     | TInt(IChar, _) ->
       (if Cil.theMachine.Cil.theMachine.char_is_unsigned then "_ui"
        else "_si"),
-      [ e ]
+      args_uisi e
     | TInt((IBool | IUChar | IUInt | IUShort | IULong), _) ->
-      "_ui", [ e ]
-    | TInt((ISChar | IShort | IInt | ILong), _) -> "_si", [ e ]
+      "_ui", args_uisi e
+    | TInt((ISChar | IShort | IInt | ILong), _) -> "_si", args_uisi e
     | TInt((ILongLong | IULongLong as ikind), _) -> raise (Longlong ikind)
     | TPtr(TInt(IChar, _), _) ->
       "_str",
@@ -71,7 +78,7 @@ let get_set_suffix_and_arg e =
 let generic_affect ~loc fname lv ev e =
   let ty = Cil.typeOf ev in
   if Gmp_types.Z.is_t ty || Gmp_types.Q.is_t ty then begin
-    let suf, args = get_set_suffix_and_arg e in
+    let suf, args = get_set_suffix_and_arg ty e in
     Constructor.mk_lib_call ~loc (fname ^ suf) (ev :: args)
   end else
     Cil.mkStmtOneInstr ~valid_sid:true (Set(lv, e, e.eloc))
@@ -122,6 +129,6 @@ let affect ~loc lv ev e =
 
 (*
 Local Variables:
-compile-command: "make -C ../.."
+compile-command: "make -C ../../../../.."
 End:
 *)
diff --git a/src/plugins/e-acsl/src/code_generator/gmp.mli b/src/plugins/e-acsl/src/code_generator/gmp.mli
index d2b467d7fbc..db4811dbeca 100644
--- a/src/plugins/e-acsl/src/code_generator/gmp.mli
+++ b/src/plugins/e-acsl/src/code_generator/gmp.mli
@@ -42,6 +42,6 @@ val affect: loc:location -> lval -> exp -> exp -> stmt
 
 (*
 Local Variables:
-compile-command: "make -C ../.."
+compile-command: "make -C ../../../../.."
 End:
 *)
diff --git a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_functions.c b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_functions.c
index 8a80b252478..cfdc4b4830a 100644
--- a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_functions.c
+++ b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_functions.c
@@ -232,6 +232,51 @@ void __gen_e_acsl_k(int x)
   return;
 }
 
+double __gen_e_acsl_f2(double x)
+{
+  __e_acsl_mpq_t __gen_e_acsl__8;
+  __e_acsl_mpq_t __gen_e_acsl__9;
+  __e_acsl_mpq_t __gen_e_acsl_div;
+  double __gen_e_acsl__10;
+  __gmpq_init(__gen_e_acsl__8);
+  __gmpq_set_str(__gen_e_acsl__8,"1",10);
+  __gmpq_init(__gen_e_acsl__9);
+  __gmpq_set_d(__gen_e_acsl__9,x);
+  __gmpq_init(__gen_e_acsl_div);
+  __gmpq_div(__gen_e_acsl_div,(__e_acsl_mpq_struct const *)(__gen_e_acsl__8),
+             (__e_acsl_mpq_struct const *)(__gen_e_acsl__9));
+  __gen_e_acsl__10 = __gmpq_get_d((__e_acsl_mpq_struct const *)(__gen_e_acsl_div));
+  __gmpq_clear(__gen_e_acsl__8);
+  __gmpq_clear(__gen_e_acsl__9);
+  __gmpq_clear(__gen_e_acsl_div);
+  /*@ assert Eva: is_nan_or_infinite: \is_finite(__gen_e_acsl__10); */
+  return __gen_e_acsl__10;
+}
+
+int __gen_e_acsl_g(int x)
+{
+  int __gen_e_acsl_g_hidden_2;
+  __gen_e_acsl_g_hidden_2 = __gen_e_acsl_g_hidden(x);
+  return __gen_e_acsl_g_hidden_2;
+}
+
+mystruct __gen_e_acsl_t1(mystruct m)
+{
+  return m;
+}
+
+int __gen_e_acsl_p1(int x, int y)
+{
+  int __retres = x + (long)y > 0L;
+  return __retres;
+}
+
+long __gen_e_acsl_t2(mystruct m)
+{
+  long __retres = m.k + (long)m.l;
+  return __retres;
+}
+
 int __gen_e_acsl_p2(int x, int y)
 {
   int __retres = x + (long)y > 0L;
@@ -339,49 +384,4 @@ int __gen_e_acsl_g_hidden(int x)
   return x;
 }
 
-double __gen_e_acsl_f2(double x)
-{
-  __e_acsl_mpq_t __gen_e_acsl__8;
-  __e_acsl_mpq_t __gen_e_acsl__9;
-  __e_acsl_mpq_t __gen_e_acsl_div;
-  double __gen_e_acsl__10;
-  __gmpq_init(__gen_e_acsl__8);
-  __gmpq_set_str(__gen_e_acsl__8,"1",10);
-  __gmpq_init(__gen_e_acsl__9);
-  __gmpq_set_d(__gen_e_acsl__9,x);
-  __gmpq_init(__gen_e_acsl_div);
-  __gmpq_div(__gen_e_acsl_div,(__e_acsl_mpq_struct const *)(__gen_e_acsl__8),
-             (__e_acsl_mpq_struct const *)(__gen_e_acsl__9));
-  __gen_e_acsl__10 = __gmpq_get_d((__e_acsl_mpq_struct const *)(__gen_e_acsl_div));
-  __gmpq_clear(__gen_e_acsl__8);
-  __gmpq_clear(__gen_e_acsl__9);
-  __gmpq_clear(__gen_e_acsl_div);
-  /*@ assert Eva: is_nan_or_infinite: \is_finite(__gen_e_acsl__10); */
-  return __gen_e_acsl__10;
-}
-
-int __gen_e_acsl_g(int x)
-{
-  int __gen_e_acsl_g_hidden_2;
-  __gen_e_acsl_g_hidden_2 = __gen_e_acsl_g_hidden(x);
-  return __gen_e_acsl_g_hidden_2;
-}
-
-mystruct __gen_e_acsl_t1(mystruct m)
-{
-  return m;
-}
-
-int __gen_e_acsl_p1(int x, int y)
-{
-  int __retres = x + (long)y > 0L;
-  return __retres;
-}
-
-long __gen_e_acsl_t2(mystruct m)
-{
-  long __retres = m.k + (long)m.l;
-  return __retres;
-}
-
 
diff --git a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_functions_rec.c b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_functions_rec.c
index d7e6ba9cda3..b9015c95933 100644
--- a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_functions_rec.c
+++ b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_functions_rec.c
@@ -105,88 +105,6 @@ int main(void)
   return __retres;
 }
 
-int __gen_e_acsl_g(int n)
-{
-  int __retres = 0;
-  return __retres;
-}
-
-int __gen_e_acsl_g_5(long n)
-{
-  int __retres = 0;
-  return __retres;
-}
-
-int __gen_e_acsl_f3(int n)
-{
-  int __gen_e_acsl_if_6;
-  if (n > 0) {
-    int __gen_e_acsl_g_2;
-    int __gen_e_acsl_f3_5;
-    __gen_e_acsl_g_2 = __gen_e_acsl_g(n);
-    __gen_e_acsl_f3_5 = __gen_e_acsl_f3_2(n - 1L);
-    __gen_e_acsl_if_6 = __gen_e_acsl_g_2 * __gen_e_acsl_f3_5 - 5;
-  }
-  else {
-    int __gen_e_acsl_g_8;
-    __gen_e_acsl_g_8 = __gen_e_acsl_g_5(n + 1L);
-    __gen_e_acsl_if_6 = __gen_e_acsl_g_8;
-  }
-  return __gen_e_acsl_if_6;
-}
-
-int __gen_e_acsl_f3_2(long n)
-{
-  int __gen_e_acsl_if_5;
-  if (n > 0L) {
-    int __gen_e_acsl_g_4;
-    int __gen_e_acsl_f3_4;
-    __gen_e_acsl_g_4 = __gen_e_acsl_g((int)n);
-    __gen_e_acsl_f3_4 = __gen_e_acsl_f3_2(n - 1L);
-    __gen_e_acsl_if_5 = __gen_e_acsl_g_4 * __gen_e_acsl_f3_4 - 5;
-  }
-  else {
-    int __gen_e_acsl_g_6;
-    __gen_e_acsl_g_6 = __gen_e_acsl_g_5(n + 1L);
-    __gen_e_acsl_if_5 = __gen_e_acsl_g_6;
-  }
-  return __gen_e_acsl_if_5;
-}
-
-unsigned long __gen_e_acsl_f4(int n)
-{
-  unsigned long __gen_e_acsl_if_10;
-  if (n < 100) {
-    unsigned long __gen_e_acsl_f4_5;
-    __gen_e_acsl_f4_5 = __gen_e_acsl_f4_2(n + 1L);
-    __gen_e_acsl_if_10 = __gen_e_acsl_f4_5;
-  }
-  else {
-    unsigned long __gen_e_acsl_if_9;
-    if ((long)n < 9223372036854775807L) __gen_e_acsl_if_9 = 9223372036854775807UL;
-    else __gen_e_acsl_if_9 = 6UL;
-    __gen_e_acsl_if_10 = __gen_e_acsl_if_9;
-  }
-  return __gen_e_acsl_if_10;
-}
-
-unsigned long __gen_e_acsl_f4_2(long n)
-{
-  unsigned long __gen_e_acsl_if_8;
-  if (n < 100L) {
-    unsigned long __gen_e_acsl_f4_4;
-    __gen_e_acsl_f4_4 = __gen_e_acsl_f4_2(n + 1L);
-    __gen_e_acsl_if_8 = __gen_e_acsl_f4_4;
-  }
-  else {
-    unsigned long __gen_e_acsl_if_7;
-    if (n < 9223372036854775807L) __gen_e_acsl_if_7 = 9223372036854775807UL;
-    else __gen_e_acsl_if_7 = 6UL;
-    __gen_e_acsl_if_8 = __gen_e_acsl_if_7;
-  }
-  return __gen_e_acsl_if_8;
-}
-
 void __gen_e_acsl_f1(__e_acsl_mpz_t *__retres_arg, int n)
 {
   __e_acsl_mpz_t __gen_e_acsl_if_2;
@@ -317,4 +235,86 @@ int __gen_e_acsl_f2_2(long n)
   return __gen_e_acsl_if_3;
 }
 
+int __gen_e_acsl_g(int n)
+{
+  int __retres = 0;
+  return __retres;
+}
+
+int __gen_e_acsl_g_5(long n)
+{
+  int __retres = 0;
+  return __retres;
+}
+
+int __gen_e_acsl_f3(int n)
+{
+  int __gen_e_acsl_if_6;
+  if (n > 0) {
+    int __gen_e_acsl_g_2;
+    int __gen_e_acsl_f3_5;
+    __gen_e_acsl_g_2 = __gen_e_acsl_g(n);
+    __gen_e_acsl_f3_5 = __gen_e_acsl_f3_2(n - 1L);
+    __gen_e_acsl_if_6 = __gen_e_acsl_g_2 * __gen_e_acsl_f3_5 - 5;
+  }
+  else {
+    int __gen_e_acsl_g_8;
+    __gen_e_acsl_g_8 = __gen_e_acsl_g_5(n + 1L);
+    __gen_e_acsl_if_6 = __gen_e_acsl_g_8;
+  }
+  return __gen_e_acsl_if_6;
+}
+
+int __gen_e_acsl_f3_2(long n)
+{
+  int __gen_e_acsl_if_5;
+  if (n > 0L) {
+    int __gen_e_acsl_g_4;
+    int __gen_e_acsl_f3_4;
+    __gen_e_acsl_g_4 = __gen_e_acsl_g((int)n);
+    __gen_e_acsl_f3_4 = __gen_e_acsl_f3_2(n - 1L);
+    __gen_e_acsl_if_5 = __gen_e_acsl_g_4 * __gen_e_acsl_f3_4 - 5;
+  }
+  else {
+    int __gen_e_acsl_g_6;
+    __gen_e_acsl_g_6 = __gen_e_acsl_g_5(n + 1L);
+    __gen_e_acsl_if_5 = __gen_e_acsl_g_6;
+  }
+  return __gen_e_acsl_if_5;
+}
+
+unsigned long __gen_e_acsl_f4(int n)
+{
+  unsigned long __gen_e_acsl_if_10;
+  if (n < 100) {
+    unsigned long __gen_e_acsl_f4_5;
+    __gen_e_acsl_f4_5 = __gen_e_acsl_f4_2(n + 1L);
+    __gen_e_acsl_if_10 = __gen_e_acsl_f4_5;
+  }
+  else {
+    unsigned long __gen_e_acsl_if_9;
+    if ((long)n < 9223372036854775807L) __gen_e_acsl_if_9 = 9223372036854775807UL;
+    else __gen_e_acsl_if_9 = 6UL;
+    __gen_e_acsl_if_10 = __gen_e_acsl_if_9;
+  }
+  return __gen_e_acsl_if_10;
+}
+
+unsigned long __gen_e_acsl_f4_2(long n)
+{
+  unsigned long __gen_e_acsl_if_8;
+  if (n < 100L) {
+    unsigned long __gen_e_acsl_f4_4;
+    __gen_e_acsl_f4_4 = __gen_e_acsl_f4_2(n + 1L);
+    __gen_e_acsl_if_8 = __gen_e_acsl_f4_4;
+  }
+  else {
+    unsigned long __gen_e_acsl_if_7;
+    if (n < 9223372036854775807L) __gen_e_acsl_if_7 = 9223372036854775807UL;
+    else __gen_e_acsl_if_7 = 6UL;
+    __gen_e_acsl_if_8 = __gen_e_acsl_if_7;
+  }
+  return __gen_e_acsl_if_8;
+}
+
 
diff --git a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_rationals.c b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_rationals.c
index 7943b9907d6..ab25e5f5395 100644
--- a/src/plugins/e-acsl/tests/arith/oracle_ci/gen_rationals.c
+++ b/src/plugins/e-acsl/tests/arith/oracle_ci/gen_rationals.c
@@ -223,6 +223,44 @@ int main(void)
     __gmpq_clear(__gen_e_acsl__24);
   }
   /*@ assert 1.1d ≢ 1 + 0.1; */ ;
+  short a = (short)1;
+  short b = (short)1;
+  {
+    __e_acsl_mpq_t __gen_e_acsl__25;
+    __e_acsl_mpq_t __gen_e_acsl__26;
+    __e_acsl_mpq_t __gen_e_acsl_add_5;
+    __e_acsl_mpq_t __gen_e_acsl__27;
+    __e_acsl_mpq_t __gen_e_acsl__28;
+    __e_acsl_mpq_t __gen_e_acsl_sub_2;
+    int __gen_e_acsl_gt;
+    __gmpq_init(__gen_e_acsl__25);
+    __gmpq_set_si(__gen_e_acsl__25,(long)a,1UL);
+    __gmpq_init(__gen_e_acsl__26);
+    __gmpq_set_si(__gen_e_acsl__26,(long)((int)b),1UL);
+    __gmpq_init(__gen_e_acsl_add_5);
+    __gmpq_add(__gen_e_acsl_add_5,
+               (__e_acsl_mpq_struct const *)(__gen_e_acsl__25),
+               (__e_acsl_mpq_struct const *)(__gen_e_acsl__26));
+    __gmpq_init(__gen_e_acsl__27);
+    __gmpq_set_d(__gen_e_acsl__27,2.);
+    __gmpq_init(__gen_e_acsl__28);
+    __gmpq_set_d(__gen_e_acsl__28,1.);
+    __gmpq_init(__gen_e_acsl_sub_2);
+    __gmpq_sub(__gen_e_acsl_sub_2,
+               (__e_acsl_mpq_struct const *)(__gen_e_acsl__27),
+               (__e_acsl_mpq_struct const *)(__gen_e_acsl__28));
+    __gen_e_acsl_gt = __gmpq_cmp((__e_acsl_mpq_struct const *)(__gen_e_acsl_add_5),
+                                 (__e_acsl_mpq_struct const *)(__gen_e_acsl_sub_2));
+    __e_acsl_assert(__gen_e_acsl_gt > 0,"Assertion","main","a + b > 2. - 1.",
+                    "tests/arith/rationals.c",32);
+    __gmpq_clear(__gen_e_acsl__25);
+    __gmpq_clear(__gen_e_acsl__26);
+    __gmpq_clear(__gen_e_acsl_add_5);
+    __gmpq_clear(__gen_e_acsl__27);
+    __gmpq_clear(__gen_e_acsl__28);
+    __gmpq_clear(__gen_e_acsl_sub_2);
+  }
+  /*@ assert a + b > 2. - 1.; */ ;
   __retres = 0;
   return __retres;
 }
@@ -275,7 +313,7 @@ double __gen_e_acsl_avg(double a, double b)
     __gmpq_set(__gen_e_acsl_avg_real,
                (__e_acsl_mpq_struct const *)(__gen_e_acsl_div));
     __gmpq_init(__gen_e_acsl_delta_2);
-    __gmpq_set_si(__gen_e_acsl_delta_2,(long)__gen_e_acsl_delta);
+    __gmpq_set_si(__gen_e_acsl_delta_2,(long)__gen_e_acsl_delta,1UL);
     __gmpq_init(__gen_e_acsl_sub);
     __gmpq_sub(__gen_e_acsl_sub,
                (__e_acsl_mpq_struct const *)(__gen_e_acsl_avg_real),
@@ -290,7 +328,7 @@ double __gen_e_acsl_avg(double a, double b)
       __e_acsl_mpq_t __gen_e_acsl__4;
       int __gen_e_acsl_lt_2;
       __gmpq_init(__gen_e_acsl_delta_3);
-      __gmpq_set_si(__gen_e_acsl_delta_3,(long)__gen_e_acsl_delta);
+      __gmpq_set_si(__gen_e_acsl_delta_3,(long)__gen_e_acsl_delta,1UL);
       __gmpq_init(__gen_e_acsl_add_2);
       __gmpq_add(__gen_e_acsl_add_2,
                  (__e_acsl_mpq_struct const *)(__gen_e_acsl_avg_real),
diff --git a/src/plugins/e-acsl/tests/arith/oracle_ci/rationals.res.oracle b/src/plugins/e-acsl/tests/arith/oracle_ci/rationals.res.oracle
index 6b6e958fe33..579fe2293bd 100644
--- a/src/plugins/e-acsl/tests/arith/oracle_ci/rationals.res.oracle
+++ b/src/plugins/e-acsl/tests/arith/oracle_ci/rationals.res.oracle
@@ -43,3 +43,5 @@
 [eva:alarm] tests/arith/rationals.c:29: Warning: 
   function __e_acsl_assert: precondition got status unknown.
 [eva:alarm] tests/arith/rationals.c:29: Warning: assertion got status unknown.
+[eva:alarm] tests/arith/rationals.c:32: Warning: 
+  function __e_acsl_assert: precondition got status unknown.
diff --git a/src/plugins/e-acsl/tests/arith/rationals.c b/src/plugins/e-acsl/tests/arith/rationals.c
index 18ed5111f70..dbd2704d9a1 100644
--- a/src/plugins/e-acsl/tests/arith/rationals.c
+++ b/src/plugins/e-acsl/tests/arith/rationals.c
@@ -28,6 +28,9 @@ int main(void) {
 
   /*@ assert 1.1d != 1 + 0.1; */ ;
 
+  short a = 1, b = 1;
+  //@ assert a+b > 2.  - 1.; // gitlab public issue #14
+
   // Not yet:
   // long double ld = 0.1l;
   // /*@ assert d + 1 != ld + 1; */ ; // long double
diff --git a/src/plugins/e-acsl/tests/bts/oracle_ci/gen_bts1307.c b/src/plugins/e-acsl/tests/bts/oracle_ci/gen_bts1307.c
index dddabbabf17..7ecbe49081f 100644
--- a/src/plugins/e-acsl/tests/bts/oracle_ci/gen_bts1307.c
+++ b/src/plugins/e-acsl/tests/bts/oracle_ci/gen_bts1307.c
@@ -272,9 +272,9 @@ void __gen_e_acsl_foo(float *Mtmax_in, float *Mwmax, float *Mtmax_out)
     __gmpq_init(__gen_e_acsl_);
     __gmpq_set_str(__gen_e_acsl_,"5",10);
     __gmpq_init(__gen_e_acsl__2);
-    __gmpq_set_si(__gen_e_acsl__2,5L);
+    __gmpq_set_si(__gen_e_acsl__2,5L,1UL);
     __gmpq_init(__gen_e_acsl__3);
-    __gmpq_set_si(__gen_e_acsl__3,80L);
+    __gmpq_set_si(__gen_e_acsl__3,80L,1UL);
     __gmpq_init(__gen_e_acsl_div);
     __gmpq_div(__gen_e_acsl_div,
                (__e_acsl_mpq_struct const *)(__gen_e_acsl__2),
diff --git a/src/plugins/e-acsl/tests/gmp-only/oracle_ci/gen_functions.c b/src/plugins/e-acsl/tests/gmp-only/oracle_ci/gen_functions.c
index 91010d0c7a4..19175f48356 100644
--- a/src/plugins/e-acsl/tests/gmp-only/oracle_ci/gen_functions.c
+++ b/src/plugins/e-acsl/tests/gmp-only/oracle_ci/gen_functions.c
@@ -277,6 +277,82 @@ void __gen_e_acsl_k(int x)
   return;
 }
 
+double __gen_e_acsl_f2(double x)
+{
+  __e_acsl_mpq_t __gen_e_acsl__13;
+  __e_acsl_mpq_t __gen_e_acsl__14;
+  __e_acsl_mpq_t __gen_e_acsl_div;
+  double __gen_e_acsl__15;
+  __gmpq_init(__gen_e_acsl__13);
+  __gmpq_set_str(__gen_e_acsl__13,"1",10);
+  __gmpq_init(__gen_e_acsl__14);
+  __gmpq_set_d(__gen_e_acsl__14,x);
+  __gmpq_init(__gen_e_acsl_div);
+  __gmpq_div(__gen_e_acsl_div,
+             (__e_acsl_mpq_struct const *)(__gen_e_acsl__13),
+             (__e_acsl_mpq_struct const *)(__gen_e_acsl__14));
+  __gen_e_acsl__15 = __gmpq_get_d((__e_acsl_mpq_struct const *)(__gen_e_acsl_div));
+  __gmpq_clear(__gen_e_acsl__13);
+  __gmpq_clear(__gen_e_acsl__14);
+  __gmpq_clear(__gen_e_acsl_div);
+  /*@ assert Eva: is_nan_or_infinite: \is_finite(__gen_e_acsl__15); */
+  return __gen_e_acsl__15;
+}
+
+int __gen_e_acsl_g(int x)
+{
+  int __gen_e_acsl_g_hidden_2;
+  __gen_e_acsl_g_hidden_2 = __gen_e_acsl_g_hidden(x);
+  return __gen_e_acsl_g_hidden_2;
+}
+
+mystruct __gen_e_acsl_t1(mystruct m)
+{
+  return m;
+}
+
+int __gen_e_acsl_p1(int x, int y)
+{
+  __e_acsl_mpz_t __gen_e_acsl_x;
+  __e_acsl_mpz_t __gen_e_acsl_y;
+  __e_acsl_mpz_t __gen_e_acsl_add;
+  __e_acsl_mpz_t __gen_e_acsl_;
+  int __gen_e_acsl_gt;
+  __gmpz_init_set_si(__gen_e_acsl_x,(long)x);
+  __gmpz_init_set_si(__gen_e_acsl_y,(long)y);
+  __gmpz_init(__gen_e_acsl_add);
+  __gmpz_add(__gen_e_acsl_add,(__e_acsl_mpz_struct const *)(__gen_e_acsl_x),
+             (__e_acsl_mpz_struct const *)(__gen_e_acsl_y));
+  __gmpz_init_set_si(__gen_e_acsl_,0L);
+  __gen_e_acsl_gt = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add),
+                               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
+  int __retres = __gen_e_acsl_gt > 0;
+  __gmpz_clear(__gen_e_acsl_x);
+  __gmpz_clear(__gen_e_acsl_y);
+  __gmpz_clear(__gen_e_acsl_add);
+  __gmpz_clear(__gen_e_acsl_);
+  return __retres;
+}
+
+void __gen_e_acsl_t2(__e_acsl_mpz_t *__retres_arg, mystruct m)
+{
+  __e_acsl_mpz_t __gen_e_acsl__10;
+  __e_acsl_mpz_t __gen_e_acsl__11;
+  __e_acsl_mpz_t __gen_e_acsl_add_7;
+  __gmpz_init_set_si(__gen_e_acsl__10,(long)m.k);
+  __gmpz_init_set_si(__gen_e_acsl__11,(long)m.l);
+  __gmpz_init(__gen_e_acsl_add_7);
+  __gmpz_add(__gen_e_acsl_add_7,
+             (__e_acsl_mpz_struct const *)(__gen_e_acsl__10),
+             (__e_acsl_mpz_struct const *)(__gen_e_acsl__11));
+  __gmpz_init_set(*__retres_arg,
+                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_7));
+  __gmpz_clear(__gen_e_acsl__10);
+  __gmpz_clear(__gen_e_acsl__11);
+  __gmpz_clear(__gen_e_acsl_add_7);
+  return;
+}
+
 int __gen_e_acsl_p2(int x, int y)
 {
   __e_acsl_mpz_t __gen_e_acsl_x_2;
@@ -401,80 +477,4 @@ int __gen_e_acsl_g_hidden(int x)
   return x;
 }
 
-double __gen_e_acsl_f2(double x)
-{
-  __e_acsl_mpq_t __gen_e_acsl__13;
-  __e_acsl_mpq_t __gen_e_acsl__14;
-  __e_acsl_mpq_t __gen_e_acsl_div;
-  double __gen_e_acsl__15;
-  __gmpq_init(__gen_e_acsl__13);
-  __gmpq_set_str(__gen_e_acsl__13,"1",10);
-  __gmpq_init(__gen_e_acsl__14);
-  __gmpq_set_d(__gen_e_acsl__14,x);
-  __gmpq_init(__gen_e_acsl_div);
-  __gmpq_div(__gen_e_acsl_div,
-             (__e_acsl_mpq_struct const *)(__gen_e_acsl__13),
-             (__e_acsl_mpq_struct const *)(__gen_e_acsl__14));
-  __gen_e_acsl__15 = __gmpq_get_d((__e_acsl_mpq_struct const *)(__gen_e_acsl_div));
-  __gmpq_clear(__gen_e_acsl__13);
-  __gmpq_clear(__gen_e_acsl__14);
-  __gmpq_clear(__gen_e_acsl_div);
-  /*@ assert Eva: is_nan_or_infinite: \is_finite(__gen_e_acsl__15); */
-  return __gen_e_acsl__15;
-}
-
-int __gen_e_acsl_g(int x)
-{
-  int __gen_e_acsl_g_hidden_2;
-  __gen_e_acsl_g_hidden_2 = __gen_e_acsl_g_hidden(x);
-  return __gen_e_acsl_g_hidden_2;
-}
-
-mystruct __gen_e_acsl_t1(mystruct m)
-{
-  return m;
-}
-
-int __gen_e_acsl_p1(int x, int y)
-{
-  __e_acsl_mpz_t __gen_e_acsl_x;
-  __e_acsl_mpz_t __gen_e_acsl_y;
-  __e_acsl_mpz_t __gen_e_acsl_add;
-  __e_acsl_mpz_t __gen_e_acsl_;
-  int __gen_e_acsl_gt;
-  __gmpz_init_set_si(__gen_e_acsl_x,(long)x);
-  __gmpz_init_set_si(__gen_e_acsl_y,(long)y);
-  __gmpz_init(__gen_e_acsl_add);
-  __gmpz_add(__gen_e_acsl_add,(__e_acsl_mpz_struct const *)(__gen_e_acsl_x),
-             (__e_acsl_mpz_struct const *)(__gen_e_acsl_y));
-  __gmpz_init_set_si(__gen_e_acsl_,0L);
-  __gen_e_acsl_gt = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add),
-                               (__e_acsl_mpz_struct const *)(__gen_e_acsl_));
-  int __retres = __gen_e_acsl_gt > 0;
-  __gmpz_clear(__gen_e_acsl_x);
-  __gmpz_clear(__gen_e_acsl_y);
-  __gmpz_clear(__gen_e_acsl_add);
-  __gmpz_clear(__gen_e_acsl_);
-  return __retres;
-}
-
-void __gen_e_acsl_t2(__e_acsl_mpz_t *__retres_arg, mystruct m)
-{
-  __e_acsl_mpz_t __gen_e_acsl__10;
-  __e_acsl_mpz_t __gen_e_acsl__11;
-  __e_acsl_mpz_t __gen_e_acsl_add_7;
-  __gmpz_init_set_si(__gen_e_acsl__10,(long)m.k);
-  __gmpz_init_set_si(__gen_e_acsl__11,(long)m.l);
-  __gmpz_init(__gen_e_acsl_add_7);
-  __gmpz_add(__gen_e_acsl_add_7,
-             (__e_acsl_mpz_struct const *)(__gen_e_acsl__10),
-             (__e_acsl_mpz_struct const *)(__gen_e_acsl__11));
-  __gmpz_init_set(*__retres_arg,
-                  (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_7));
-  __gmpz_clear(__gen_e_acsl__10);
-  __gmpz_clear(__gen_e_acsl__11);
-  __gmpz_clear(__gen_e_acsl_add_7);
-  return;
-}
-
 
-- 
GitLab