From 632573a2a52c080e1d6dac221f91b0e7fc1a959e Mon Sep 17 00:00:00 2001
From: Julien Signoles <julien.signoles@cea.fr>
Date: Tue, 22 Mar 2016 10:09:22 +0100
Subject: [PATCH] [typing] infer type of intervals wrt context: reduce the
 number of generated casts

---
 src/plugins/e-acsl/new_typing.ml              |  56 ++-
 src/plugins/e-acsl/new_typing.mli             |   6 +-
 src/plugins/e-acsl/quantif.ml                 |   2 +-
 .../oracle/block_length.res.oracle            |   2 +-
 .../e-acsl-runtime/oracle/gen_base_addr.c     |  24 +-
 .../e-acsl-runtime/oracle/gen_block_length.c  | 351 ++++--------------
 .../oracle/initialized.res.oracle             |   4 +-
 .../e-acsl-runtime/oracle/vector.res.oracle   |   4 +-
 .../tests/gmp/oracle/comparison.1.res.oracle  |   1 +
 .../e-acsl/tests/gmp/oracle/gen_comparison2.c |  48 +--
 .../tests/gmp/oracle/gen_integer_constant2.c  |   6 +-
 .../e-acsl/tests/gmp/oracle/gen_longlong.c    |   6 +-
 .../e-acsl/tests/gmp/oracle/gen_longlong2.c   |   6 +-
 .../e-acsl/tests/gmp/oracle/gen_not2.c        |   4 +-
 .../gmp/oracle/integer_constant.1.res.oracle  |   3 +-
 .../tests/gmp/oracle/longlong.0.res.oracle    |  10 +-
 .../tests/gmp/oracle/longlong.1.res.oracle    |  10 +-
 .../e-acsl/tests/gmp/oracle/not.1.res.oracle  |   1 +
 src/plugins/e-acsl/translate.ml               |  12 +-
 19 files changed, 191 insertions(+), 365 deletions(-)

diff --git a/src/plugins/e-acsl/new_typing.ml b/src/plugins/e-acsl/new_typing.ml
index a7ae7dbb5ba..f47671881fe 100644
--- a/src/plugins/e-acsl/new_typing.ml
+++ b/src/plugins/e-acsl/new_typing.ml
@@ -41,6 +41,10 @@ type integer_ty =
   | C_type of ikind
   | Other
 
+let gmp = Gmp
+let c_int = C_type IInt
+let ikind ik = C_type ik
+
 let join ty1 ty2 = match ty1, ty2 with
   | Other, Other -> Other
   | Other, (Gmp | C_type _) | (Gmp | C_type _), Other ->
@@ -59,8 +63,6 @@ let typ_of_integer_ty = function
   | C_type ik -> TInt(ik, [])
   | Other -> Options.fatal "[typing] not an integer type"
 
-let c_int = C_type IInt
-
 let size_t () = match Cil.theMachine.Cil.typeOfSizeOf with
   | TInt(kind, _) -> C_type kind
   | _ -> assert false
@@ -132,16 +134,18 @@ end
 
 (* Compute the smallest type (bigger than [int]) which can contain the whole
    interval. It is the \theta operator of the JFLA's paper. *)
-let ty_of_interv i =
+let ty_of_interv ~ctx i =
   let open Interval in
   let is_pos = Integer.ge i.lower Integer.zero in
   try
     let lkind = Cil.intKindForValue i.lower is_pos in
     let ukind = Cil.intKindForValue i.upper is_pos in
     let kind = if Cil.intTypeIncluded lkind ukind then ukind else lkind in
-    (* int whenever possible to prevent superfluous casts in the generated
+    (* ctx type whenever possible to prevent superfluous casts in the generated
        code *)
-    if Cil.intTypeIncluded kind IInt then c_int else C_type kind
+    (match ctx with
+    | Gmp | Other -> C_type kind
+    | C_type ik -> if Cil.intTypeIncluded kind ik then ctx else C_type kind)
   with Cil.Not_representable ->
     Gmp
 
@@ -174,7 +178,7 @@ let rec type_term env ~ctx t =
     | TAlignOf _ ->
       (try
          let i = Interval.infer env t in
-         ty_of_interv i
+         ty_of_interv ~ctx i
        with Interval.Not_an_integer ->
          Other)
 
@@ -182,7 +186,7 @@ let rec type_term env ~ctx t =
       (try
          let i = Interval.infer env t in
          type_term_lval env tlv;
-         ty_of_interv i
+         ty_of_interv ~ctx i
        with Interval.Not_an_integer ->
          Other)
 
@@ -193,7 +197,7 @@ let rec type_term env ~ctx t =
          let i = Interval.infer env t in
          (* [t'] must be typed, but it is a pointer *)
          ignore (type_term env ~ctx:Other t');
-         ty_of_interv i
+         ty_of_interv ~ctx i
        with Interval.Not_an_integer ->
          Other)
 
@@ -203,14 +207,14 @@ let rec type_term env ~ctx t =
          (* [t1] and [t2] must be typed, but they are pointers *)
          ignore (type_term env ~ctx:Other t1);
          ignore (type_term env ~ctx:Other t2);
-         ty_of_interv i
+         ty_of_interv ~ctx i
        with Interval.Not_an_integer ->
          Other)
 
     | TUnOp (_, t') ->
       let i = Interval.infer env t in
       let i' = Interval.infer env t' in
-      let ctx = mk_ctx (ty_of_interv (Interval.join i i')) in
+      let ctx = mk_ctx (ty_of_interv ~ctx (Interval.join i i')) in
       ignore (type_term env ~ctx t');
       ctx
 
@@ -218,7 +222,9 @@ let rec type_term env ~ctx t =
       let i = Interval.infer env t in
       let i1 = Interval.infer env t1 in
       let i2 = Interval.infer env t2 in
-      let ctx = mk_ctx (ty_of_interv (Interval.join i (Interval.join i1 i2))) in
+      let ctx =
+        mk_ctx (ty_of_interv ~ctx (Interval.join i (Interval.join i1 i2)))
+      in
       ignore (type_term env ~ctx t1);
       ignore (type_term env ~ctx t2);
       ctx
@@ -228,7 +234,7 @@ let rec type_term env ~ctx t =
         try
           let i1 = Interval.infer env t1 in
           let i2 = Interval.infer env t2 in
-          mk_ctx (ty_of_interv (Interval.join i1 i2))
+          mk_ctx (ty_of_interv ~ctx (Interval.join i1 i2))
         with Interval.Not_an_integer ->
           Other
       in
@@ -244,7 +250,7 @@ let rec type_term env ~ctx t =
       (* both operands fit in an int. *)
       ignore (type_term env ~ctx:c_int t1);
       ignore (type_term env ~ctx:c_int t2);
-      ty_of_interv (Interval.join i1 i2)
+      ty_of_interv ~ctx (Interval.join i1 i2)
 
     | TBinOp (BAnd, _, _) -> Error.not_yet "bitwise and"
     | TBinOp (BXor, _, _) -> Error.not_yet "bitwise xor"
@@ -258,7 +264,7 @@ let rec type_term env ~ctx t =
          (* nothing to do more: [i] is already more precise than what we could
             infer from the arguments of the cast. Also, do not type the internal
             term: possibly it is not even an integer *)
-         let ty = ty_of_interv i in
+         let ty = ty_of_interv ~ctx i in
          ignore (type_term env ~ctx:ty t');
          ty
        with Interval.Not_an_integer ->
@@ -273,7 +279,7 @@ let rec type_term env ~ctx t =
         try
           let i2 = Interval.infer env t2 in
           let i3 = Interval.infer env t3 in
-          mk_ctx (ty_of_interv (Interval.join i (Interval.join i2 i3)))
+          mk_ctx (ty_of_interv ~ctx (Interval.join i (Interval.join i2 i3)))
         with Interval.Not_an_integer ->
           Other
       in
@@ -288,7 +294,7 @@ let rec type_term env ~ctx t =
       let i = Interval.infer env t in
       let i1 = Interval.infer env t1 in
       let i2 = Interval.infer env t2 in
-      let ty = ty_of_interv (Interval.join i (Interval.join i1 i2)) in
+      let ty = ty_of_interv ~ctx (Interval.join i (Interval.join i1 i2)) in
       ignore (type_term env ~ctx:ty t1);
       ignore (type_term env ~ctx:ty t2);
       ty
@@ -361,7 +367,7 @@ let rec type_predicate_named env p =
           let i1 = Interval.infer env t1 in
           let i2 = Interval.infer env t2 in
           let i = Interval.join i1 i2 in
-          mk_ctx (ty_of_interv i)
+          mk_ctx (ty_of_interv ~ctx:c_int i)
         with Interval.Not_an_integer ->
           Other
       in
@@ -409,7 +415,21 @@ let rec type_predicate_named env p =
               | _ -> assert false
             in
             let i = Interval.join i1 i2 in
-            let ctx = mk_ctx (ty_of_interv i) in
+            let ctx = match x.lv_type with
+              | Linteger -> Gmp
+              | Ctype ty ->
+                (match Cil.unrollType ty with
+                | TInt(ik, _) -> C_type ik
+                | ty ->
+                  Options.fatal "unexpected type %a for quantified variable %a"
+                    Printer.pp_typ ty
+                    Printer.pp_logic_var x)
+              | lty ->
+                Options.fatal "unexpected type %a for quantified variable %a"
+                  Printer.pp_logic_type lty
+                  Printer.pp_logic_var x
+            in
+            let ctx = mk_ctx (ty_of_interv ~ctx i) in
             ignore (type_term env ~ctx t1);
             ignore (type_term env ~ctx t2);
             Interval.Env.add x i env)
diff --git a/src/plugins/e-acsl/new_typing.mli b/src/plugins/e-acsl/new_typing.mli
index ee77469207b..aeb35c701be 100644
--- a/src/plugins/e-acsl/new_typing.mli
+++ b/src/plugins/e-acsl/new_typing.mli
@@ -30,11 +30,15 @@ open Cil_types
 (** {2 Datatypes} *)
 (******************************************************************************)
 
-type integer_ty =
+type integer_ty = private
   | Gmp
   | C_type of ikind
   | Other
 
+val gmp: integer_ty
+val c_int: integer_ty
+val ikind: ikind -> integer_ty
+
 val typ_of_integer_ty: integer_ty -> typ
 
 val join: integer_ty -> integer_ty -> integer_ty
diff --git a/src/plugins/e-acsl/quantif.ml b/src/plugins/e-acsl/quantif.ml
index ddc097dc46c..bce6ad891ef 100644
--- a/src/plugins/e-acsl/quantif.ml
+++ b/src/plugins/e-acsl/quantif.ml
@@ -214,7 +214,7 @@ let convert kf env loc is_forall p bounded_vars hyps goal =
       let stmts_block b = [ mkStmt ~valid_sid:true (Block b) ] in
       let tlv = Logic_const.tvar ~loc llv in
       let guard = Logic_const.term ~loc (TBinOp(bop2, tlv, t2)) Linteger in
-      New_typing.type_term ~ctx:(New_typing.C_type IInt) guard;
+      New_typing.type_term ~ctx:New_typing.c_int guard;
       let guard_exp, env = term_to_exp kf (Env.push env) guard in
       let break_stmt = mkStmt ~valid_sid:true (Break guard_exp.eloc) in
       let guard_blk, env =
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/block_length.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/block_length.res.oracle
index 33f7f62f158..554caab3fd5 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/block_length.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/block_length.res.oracle
@@ -13,10 +13,10 @@ FRAMAC_SHARE/libc/stdlib.h:161:[e-acsl] warning: E-ACSL construct `assigns claus
 FRAMAC_SHARE/libc/stdlib.h:166:[e-acsl] warning: E-ACSL construct `logic function application' is not yet supported.
                   Ignoring annotation.
 [e-acsl] translation done in project "e-acsl".
-FRAMAC_SHARE/e-acsl/e_acsl.h:43:[value] warning: function __e_acsl_assert: precondition got status unknown.
 FRAMAC_SHARE/libc/stdlib.h:164:[value] warning: function __gen_e_acsl_malloc, behavior allocation: postcondition got status unknown. (Behavior may be inactive, no reduction performed.)
 FRAMAC_SHARE/libc/stdlib.h:169:[value] warning: function __gen_e_acsl_malloc, behavior no_allocation: postcondition got status unknown. (Behavior may be inactive, no reduction performed.)
 tests/e-acsl-runtime/block_length.c:45:[value] warning: assertion got status unknown.
+FRAMAC_SHARE/e-acsl/e_acsl.h:43:[value] warning: function __e_acsl_assert: precondition got status unknown.
 tests/e-acsl-runtime/block_length.c:46:[value] warning: assertion got status unknown.
 tests/e-acsl-runtime/block_length.c:48:[value] warning: assertion got status unknown.
 tests/e-acsl-runtime/block_length.c:54:[value] warning: assertion got status unknown.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_base_addr.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_base_addr.c
index 14aba6b8cd0..8363cb460ba 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_base_addr.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_base_addr.c
@@ -48,7 +48,7 @@ int main(void)
   {
     void *__gen_e_acsl_base_addr_3;
     void *__gen_e_acsl_base_addr_4;
-    __gen_e_acsl_base_addr_3 = __e_acsl_base_addr((void *)(& A[(unsigned long)3]));
+    __gen_e_acsl_base_addr_3 = __e_acsl_base_addr((void *)(& A[3]));
     __gen_e_acsl_base_addr_4 = __e_acsl_base_addr((void *)PA);
     __e_acsl_assert(__gen_e_acsl_base_addr_3 == __gen_e_acsl_base_addr_4,
                     (char *)"Assertion",(char *)"main",
@@ -69,8 +69,8 @@ int main(void)
   {
     void *__gen_e_acsl_base_addr_7;
     void *__gen_e_acsl_base_addr_8;
-    __gen_e_acsl_base_addr_7 = __e_acsl_base_addr((void *)(PA + (unsigned long)2));
-    __gen_e_acsl_base_addr_8 = __e_acsl_base_addr((void *)(& A[(unsigned long)3]));
+    __gen_e_acsl_base_addr_7 = __e_acsl_base_addr((void *)(PA + 2));
+    __gen_e_acsl_base_addr_8 = __e_acsl_base_addr((void *)(& A[3]));
     __e_acsl_assert(__gen_e_acsl_base_addr_7 == __gen_e_acsl_base_addr_8,
                     (char *)"Assertion",(char *)"main",
                     (char *)"\\base_addr(PA+2) == \\base_addr(&A[3])",17);
@@ -99,7 +99,7 @@ int main(void)
   {
     void *__gen_e_acsl_base_addr_11;
     void *__gen_e_acsl_base_addr_12;
-    __gen_e_acsl_base_addr_11 = __e_acsl_base_addr((void *)(& a[(unsigned long)3]));
+    __gen_e_acsl_base_addr_11 = __e_acsl_base_addr((void *)(& a[3]));
     __gen_e_acsl_base_addr_12 = __e_acsl_base_addr((void *)pa);
     __e_acsl_assert(__gen_e_acsl_base_addr_11 == __gen_e_acsl_base_addr_12,
                     (char *)"Assertion",(char *)"main",
@@ -121,7 +121,7 @@ int main(void)
   {
     void *__gen_e_acsl_base_addr_15;
     void *__gen_e_acsl_base_addr_16;
-    __gen_e_acsl_base_addr_15 = __e_acsl_base_addr((void *)(pa + (unsigned long)2));
+    __gen_e_acsl_base_addr_15 = __e_acsl_base_addr((void *)(pa + 2));
     __gen_e_acsl_base_addr_16 = __e_acsl_base_addr((void *)(a));
     __e_acsl_assert(__gen_e_acsl_base_addr_15 == __gen_e_acsl_base_addr_16,
                     (char *)"Assertion",(char *)"main",
@@ -145,7 +145,7 @@ int main(void)
   {
     void *__gen_e_acsl_base_addr_19;
     void *__gen_e_acsl_base_addr_20;
-    __gen_e_acsl_base_addr_19 = __e_acsl_base_addr((void *)(pl + (unsigned long)2));
+    __gen_e_acsl_base_addr_19 = __e_acsl_base_addr((void *)(pl + 2));
     __gen_e_acsl_base_addr_20 = __e_acsl_base_addr((void *)(& l));
     __e_acsl_assert(__gen_e_acsl_base_addr_19 == __gen_e_acsl_base_addr_20,
                     (char *)"Assertion",(char *)"main",
@@ -195,8 +195,8 @@ int main(void)
   {
     void *__gen_e_acsl_base_addr_27;
     void *__gen_e_acsl_base_addr_28;
-    __gen_e_acsl_base_addr_27 = __e_acsl_base_addr((void *)(p + (unsigned long)1));
-    __gen_e_acsl_base_addr_28 = __e_acsl_base_addr((void *)(pd + (unsigned long)5));
+    __gen_e_acsl_base_addr_27 = __e_acsl_base_addr((void *)(p + 1));
+    __gen_e_acsl_base_addr_28 = __e_acsl_base_addr((void *)(pd + 5));
     __e_acsl_assert(__gen_e_acsl_base_addr_27 == __gen_e_acsl_base_addr_28,
                     (char *)"Assertion",(char *)"main",
                     (char *)"\\base_addr(p+1) == \\base_addr(pd+5)",45);
@@ -205,8 +205,8 @@ int main(void)
   {
     void *__gen_e_acsl_base_addr_29;
     void *__gen_e_acsl_base_addr_30;
-    __gen_e_acsl_base_addr_29 = __e_acsl_base_addr((void *)(p + (unsigned long)11));
-    __gen_e_acsl_base_addr_30 = __e_acsl_base_addr((void *)(pd + (unsigned long)1));
+    __gen_e_acsl_base_addr_29 = __e_acsl_base_addr((void *)(p + 11));
+    __gen_e_acsl_base_addr_30 = __e_acsl_base_addr((void *)(pd + 1));
     __e_acsl_assert(__gen_e_acsl_base_addr_29 == __gen_e_acsl_base_addr_30,
                     (char *)"Assertion",(char *)"main",
                     (char *)"\\base_addr(p+11) == \\base_addr(pd+1)",46);
@@ -217,7 +217,7 @@ int main(void)
   {
     void *__gen_e_acsl_base_addr_31;
     void *__gen_e_acsl_base_addr_32;
-    __gen_e_acsl_base_addr_31 = __e_acsl_base_addr((void *)(p + (unsigned long)5));
+    __gen_e_acsl_base_addr_31 = __e_acsl_base_addr((void *)(p + 5));
     __gen_e_acsl_base_addr_32 = __e_acsl_base_addr((void *)pd);
     __e_acsl_assert(__gen_e_acsl_base_addr_31 == __gen_e_acsl_base_addr_32,
                     (char *)"Assertion",(char *)"main",
@@ -227,7 +227,7 @@ int main(void)
   {
     void *__gen_e_acsl_base_addr_33;
     void *__gen_e_acsl_base_addr_34;
-    __gen_e_acsl_base_addr_33 = __e_acsl_base_addr((void *)(p - (unsigned long)5));
+    __gen_e_acsl_base_addr_33 = __e_acsl_base_addr((void *)(p - 5));
     __gen_e_acsl_base_addr_34 = __e_acsl_base_addr((void *)pd);
     __e_acsl_assert(__gen_e_acsl_base_addr_33 == __gen_e_acsl_base_addr_34,
                     (char *)"Assertion",(char *)"main",
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_block_length.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_block_length.c
index 151a794d210..7de3d4ff48c 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_block_length.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_block_length.c
@@ -42,77 +42,38 @@ int main(void)
   /*@ assert \block_length((int *)A) ≡ sizeof(A); */
   {
     unsigned long __gen_e_acsl_block_length;
-    mpz_t __gen_e_acsl_block_length_2;
-    mpz_t __gen_e_acsl_sizeof;
-    int __gen_e_acsl_eq;
     __gen_e_acsl_block_length = __e_acsl_block_length((void *)(A));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_2,__gen_e_acsl_block_length);
-    __gmpz_init_set_si(__gen_e_acsl_sizeof,16L);
-    __gen_e_acsl_eq = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_2),
-                                 (__mpz_struct const *)(__gen_e_acsl_sizeof));
-    __e_acsl_assert(__gen_e_acsl_eq == 0,(char *)"Assertion",(char *)"main",
+    __e_acsl_assert(__gen_e_acsl_block_length == 16,(char *)"Assertion",
+                    (char *)"main",
                     (char *)"\\block_length((int *)A) == sizeof(A)",15);
-    __gmpz_clear(__gen_e_acsl_block_length_2);
-    __gmpz_clear(__gen_e_acsl_sizeof);
   }
   /*@ assert \block_length(&A[3]) ≡ sizeof(A); */
   {
-    unsigned long __gen_e_acsl_block_length_3;
-    mpz_t __gen_e_acsl_block_length_4;
-    mpz_t __gen_e_acsl_sizeof_2;
-    int __gen_e_acsl_eq_2;
-    __gen_e_acsl_block_length_3 = __e_acsl_block_length((void *)(& A[3]));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_4,
-                       __gen_e_acsl_block_length_3);
-    __gmpz_init_set_si(__gen_e_acsl_sizeof_2,16L);
-    __gen_e_acsl_eq_2 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_4),
-                                   (__mpz_struct const *)(__gen_e_acsl_sizeof_2));
-    __e_acsl_assert(__gen_e_acsl_eq_2 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_2;
+    __gen_e_acsl_block_length_2 = __e_acsl_block_length((void *)(& A[3]));
+    __e_acsl_assert(__gen_e_acsl_block_length_2 == 16,(char *)"Assertion",
                     (char *)"main",
                     (char *)"\\block_length(&A[3]) == sizeof(A)",16);
-    __gmpz_clear(__gen_e_acsl_block_length_4);
-    __gmpz_clear(__gen_e_acsl_sizeof_2);
   }
   /*@ assert \block_length(PA) ≡ sizeof(A); */
   {
-    unsigned long __gen_e_acsl_block_length_5;
-    mpz_t __gen_e_acsl_block_length_6;
-    mpz_t __gen_e_acsl_sizeof_3;
-    int __gen_e_acsl_eq_3;
-    __gen_e_acsl_block_length_5 = __e_acsl_block_length((void *)PA);
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_6,
-                       __gen_e_acsl_block_length_5);
-    __gmpz_init_set_si(__gen_e_acsl_sizeof_3,16L);
-    __gen_e_acsl_eq_3 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_6),
-                                   (__mpz_struct const *)(__gen_e_acsl_sizeof_3));
-    __e_acsl_assert(__gen_e_acsl_eq_3 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_3;
+    __gen_e_acsl_block_length_3 = __e_acsl_block_length((void *)PA);
+    __e_acsl_assert(__gen_e_acsl_block_length_3 == 16,(char *)"Assertion",
                     (char *)"main",(char *)"\\block_length(PA) == sizeof(A)",
                     17);
-    __gmpz_clear(__gen_e_acsl_block_length_6);
-    __gmpz_clear(__gen_e_acsl_sizeof_3);
   }
   PA ++;
   /*@ assert \block_length(PA+1) ≡ \block_length(&A[1]); */
   {
-    unsigned long __gen_e_acsl_block_length_7;
-    mpz_t __gen_e_acsl_block_length_8;
-    unsigned long __gen_e_acsl_block_length_9;
-    mpz_t __gen_e_acsl_block_length_10;
-    int __gen_e_acsl_eq_4;
-    __gen_e_acsl_block_length_7 = __e_acsl_block_length((void *)(PA + 1));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_8,
-                       __gen_e_acsl_block_length_7);
-    __gen_e_acsl_block_length_9 = __e_acsl_block_length((void *)(& A[1]));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_10,
-                       __gen_e_acsl_block_length_9);
-    __gen_e_acsl_eq_4 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_8),
-                                   (__mpz_struct const *)(__gen_e_acsl_block_length_10));
-    __e_acsl_assert(__gen_e_acsl_eq_4 == 0,(char *)"Assertion",
-                    (char *)"main",
+    unsigned long __gen_e_acsl_block_length_4;
+    unsigned long __gen_e_acsl_block_length_5;
+    __gen_e_acsl_block_length_4 = __e_acsl_block_length((void *)(PA + 1));
+    __gen_e_acsl_block_length_5 = __e_acsl_block_length((void *)(& A[1]));
+    __e_acsl_assert(__gen_e_acsl_block_length_4 == __gen_e_acsl_block_length_5,
+                    (char *)"Assertion",(char *)"main",
                     (char *)"\\block_length(PA+1) == \\block_length(&A[1])",
                     19);
-    __gmpz_clear(__gen_e_acsl_block_length_8);
-    __gmpz_clear(__gen_e_acsl_block_length_10);
   }
   __e_acsl_initialize((void *)(a),sizeof(int));
   a[0] = 1;
@@ -126,81 +87,40 @@ int main(void)
   pa = (int *)(& a);
   /*@ assert \block_length((int *)a) ≡ sizeof(a); */
   {
-    unsigned long __gen_e_acsl_block_length_11;
-    mpz_t __gen_e_acsl_block_length_12;
-    mpz_t __gen_e_acsl_sizeof_4;
-    int __gen_e_acsl_eq_5;
-    __gen_e_acsl_block_length_11 = __e_acsl_block_length((void *)(a));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_12,
-                       __gen_e_acsl_block_length_11);
-    __gmpz_init_set_si(__gen_e_acsl_sizeof_4,16L);
-    __gen_e_acsl_eq_5 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_12),
-                                   (__mpz_struct const *)(__gen_e_acsl_sizeof_4));
-    __e_acsl_assert(__gen_e_acsl_eq_5 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_6;
+    __gen_e_acsl_block_length_6 = __e_acsl_block_length((void *)(a));
+    __e_acsl_assert(__gen_e_acsl_block_length_6 == 16,(char *)"Assertion",
                     (char *)"main",
                     (char *)"\\block_length((int *)a) == sizeof(a)",24);
-    __gmpz_clear(__gen_e_acsl_block_length_12);
-    __gmpz_clear(__gen_e_acsl_sizeof_4);
   }
   /*@ assert \block_length(&a[3]) ≡ sizeof(a); */
   {
-    unsigned long __gen_e_acsl_block_length_13;
-    mpz_t __gen_e_acsl_block_length_14;
-    mpz_t __gen_e_acsl_sizeof_5;
-    int __gen_e_acsl_eq_6;
-    __gen_e_acsl_block_length_13 = __e_acsl_block_length((void *)(& a[3]));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_14,
-                       __gen_e_acsl_block_length_13);
-    __gmpz_init_set_si(__gen_e_acsl_sizeof_5,16L);
-    __gen_e_acsl_eq_6 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_14),
-                                   (__mpz_struct const *)(__gen_e_acsl_sizeof_5));
-    __e_acsl_assert(__gen_e_acsl_eq_6 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_7;
+    __gen_e_acsl_block_length_7 = __e_acsl_block_length((void *)(& a[3]));
+    __e_acsl_assert(__gen_e_acsl_block_length_7 == 16,(char *)"Assertion",
                     (char *)"main",
                     (char *)"\\block_length(&a[3]) == sizeof(a)",25);
-    __gmpz_clear(__gen_e_acsl_block_length_14);
-    __gmpz_clear(__gen_e_acsl_sizeof_5);
   }
   /*@ assert \block_length(pa) ≡ sizeof(a); */
   {
-    unsigned long __gen_e_acsl_block_length_15;
-    mpz_t __gen_e_acsl_block_length_16;
-    mpz_t __gen_e_acsl_sizeof_6;
-    int __gen_e_acsl_eq_7;
-    __gen_e_acsl_block_length_15 = __e_acsl_block_length((void *)pa);
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_16,
-                       __gen_e_acsl_block_length_15);
-    __gmpz_init_set_si(__gen_e_acsl_sizeof_6,16L);
-    __gen_e_acsl_eq_7 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_16),
-                                   (__mpz_struct const *)(__gen_e_acsl_sizeof_6));
-    __e_acsl_assert(__gen_e_acsl_eq_7 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_8;
+    __gen_e_acsl_block_length_8 = __e_acsl_block_length((void *)pa);
+    __e_acsl_assert(__gen_e_acsl_block_length_8 == 16,(char *)"Assertion",
                     (char *)"main",(char *)"\\block_length(pa) == sizeof(a)",
                     26);
-    __gmpz_clear(__gen_e_acsl_block_length_16);
-    __gmpz_clear(__gen_e_acsl_sizeof_6);
   }
   __e_acsl_full_init((void *)(& pa));
   pa ++;
   /*@ assert \block_length(pa+1) ≡ \block_length(&a[1]); */
   {
-    unsigned long __gen_e_acsl_block_length_17;
-    mpz_t __gen_e_acsl_block_length_18;
-    unsigned long __gen_e_acsl_block_length_19;
-    mpz_t __gen_e_acsl_block_length_20;
-    int __gen_e_acsl_eq_8;
-    __gen_e_acsl_block_length_17 = __e_acsl_block_length((void *)(pa + 1));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_18,
-                       __gen_e_acsl_block_length_17);
-    __gen_e_acsl_block_length_19 = __e_acsl_block_length((void *)(& a[1]));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_20,
-                       __gen_e_acsl_block_length_19);
-    __gen_e_acsl_eq_8 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_18),
-                                   (__mpz_struct const *)(__gen_e_acsl_block_length_20));
-    __e_acsl_assert(__gen_e_acsl_eq_8 == 0,(char *)"Assertion",
-                    (char *)"main",
+    unsigned long __gen_e_acsl_block_length_9;
+    unsigned long __gen_e_acsl_block_length_10;
+    __gen_e_acsl_block_length_9 = __e_acsl_block_length((void *)(pa + 1));
+    __gen_e_acsl_block_length_10 = __e_acsl_block_length((void *)(& a[1]));
+    __e_acsl_assert(__gen_e_acsl_block_length_9 == __gen_e_acsl_block_length_10,
+                    (char *)"Assertion",(char *)"main",
                     (char *)"\\block_length(pa+1) == \\block_length(&a[1])",
                     28);
-    __gmpz_clear(__gen_e_acsl_block_length_18);
-    __gmpz_clear(__gen_e_acsl_block_length_20);
   }
   __e_acsl_full_init((void *)(& l));
   l = (long)4;
@@ -208,236 +128,113 @@ int main(void)
   pl = (char *)(& l);
   /*@ assert \block_length(&l) ≡ sizeof(long); */
   {
-    unsigned long __gen_e_acsl_block_length_21;
-    mpz_t __gen_e_acsl_block_length_22;
-    mpz_t __gen_e_acsl_sizeof_7;
-    int __gen_e_acsl_eq_9;
-    __gen_e_acsl_block_length_21 = __e_acsl_block_length((void *)(& l));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_22,
-                       __gen_e_acsl_block_length_21);
-    __gmpz_init_set_si(__gen_e_acsl_sizeof_7,8L);
-    __gen_e_acsl_eq_9 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_22),
-                                   (__mpz_struct const *)(__gen_e_acsl_sizeof_7));
-    __e_acsl_assert(__gen_e_acsl_eq_9 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_11;
+    __gen_e_acsl_block_length_11 = __e_acsl_block_length((void *)(& l));
+    __e_acsl_assert(__gen_e_acsl_block_length_11 == 8,(char *)"Assertion",
                     (char *)"main",
                     (char *)"\\block_length(&l) == sizeof(long)",34);
-    __gmpz_clear(__gen_e_acsl_block_length_22);
-    __gmpz_clear(__gen_e_acsl_sizeof_7);
   }
   /*@ assert \block_length(pl) ≡ sizeof(long); */
   {
-    unsigned long __gen_e_acsl_block_length_23;
-    mpz_t __gen_e_acsl_block_length_24;
-    mpz_t __gen_e_acsl_sizeof_8;
-    int __gen_e_acsl_eq_10;
-    __gen_e_acsl_block_length_23 = __e_acsl_block_length((void *)pl);
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_24,
-                       __gen_e_acsl_block_length_23);
-    __gmpz_init_set_si(__gen_e_acsl_sizeof_8,8L);
-    __gen_e_acsl_eq_10 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_24),
-                                    (__mpz_struct const *)(__gen_e_acsl_sizeof_8));
-    __e_acsl_assert(__gen_e_acsl_eq_10 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_12;
+    __gen_e_acsl_block_length_12 = __e_acsl_block_length((void *)pl);
+    __e_acsl_assert(__gen_e_acsl_block_length_12 == 8,(char *)"Assertion",
                     (char *)"main",
                     (char *)"\\block_length(pl) == sizeof(long)",35);
-    __gmpz_clear(__gen_e_acsl_block_length_24);
-    __gmpz_clear(__gen_e_acsl_sizeof_8);
   }
   /*@ assert \block_length(pl+7) ≡ sizeof(long); */
   {
-    unsigned long __gen_e_acsl_block_length_25;
-    mpz_t __gen_e_acsl_block_length_26;
-    mpz_t __gen_e_acsl_sizeof_9;
-    int __gen_e_acsl_eq_11;
-    __gen_e_acsl_block_length_25 = __e_acsl_block_length((void *)(pl + 7));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_26,
-                       __gen_e_acsl_block_length_25);
-    __gmpz_init_set_si(__gen_e_acsl_sizeof_9,8L);
-    __gen_e_acsl_eq_11 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_26),
-                                    (__mpz_struct const *)(__gen_e_acsl_sizeof_9));
-    __e_acsl_assert(__gen_e_acsl_eq_11 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_13;
+    __gen_e_acsl_block_length_13 = __e_acsl_block_length((void *)(pl + 7));
+    __e_acsl_assert(__gen_e_acsl_block_length_13 == 8,(char *)"Assertion",
                     (char *)"main",
                     (char *)"\\block_length(pl+7) == sizeof(long)",36);
-    __gmpz_clear(__gen_e_acsl_block_length_26);
-    __gmpz_clear(__gen_e_acsl_sizeof_9);
   }
   __e_acsl_full_init((void *)(& pi));
   pi = (int *)(& l);
   /*@ assert \block_length(pi) ≡ \block_length(&l); */
   {
-    unsigned long __gen_e_acsl_block_length_27;
-    mpz_t __gen_e_acsl_block_length_28;
-    unsigned long __gen_e_acsl_block_length_29;
-    mpz_t __gen_e_acsl_block_length_30;
-    int __gen_e_acsl_eq_12;
-    __gen_e_acsl_block_length_27 = __e_acsl_block_length((void *)pi);
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_28,
-                       __gen_e_acsl_block_length_27);
-    __gen_e_acsl_block_length_29 = __e_acsl_block_length((void *)(& l));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_30,
-                       __gen_e_acsl_block_length_29);
-    __gen_e_acsl_eq_12 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_28),
-                                    (__mpz_struct const *)(__gen_e_acsl_block_length_30));
-    __e_acsl_assert(__gen_e_acsl_eq_12 == 0,(char *)"Assertion",
-                    (char *)"main",
+    unsigned long __gen_e_acsl_block_length_14;
+    unsigned long __gen_e_acsl_block_length_15;
+    __gen_e_acsl_block_length_14 = __e_acsl_block_length((void *)pi);
+    __gen_e_acsl_block_length_15 = __e_acsl_block_length((void *)(& l));
+    __e_acsl_assert(__gen_e_acsl_block_length_14 == __gen_e_acsl_block_length_15,
+                    (char *)"Assertion",(char *)"main",
                     (char *)"\\block_length(pi) == \\block_length(&l)",38);
-    __gmpz_clear(__gen_e_acsl_block_length_28);
-    __gmpz_clear(__gen_e_acsl_block_length_30);
   }
   __e_acsl_full_init((void *)(& pi));
   pi ++;
   /*@ assert \block_length(pi) ≡ \block_length(&l); */
   {
-    unsigned long __gen_e_acsl_block_length_31;
-    mpz_t __gen_e_acsl_block_length_32;
-    unsigned long __gen_e_acsl_block_length_33;
-    mpz_t __gen_e_acsl_block_length_34;
-    int __gen_e_acsl_eq_13;
-    __gen_e_acsl_block_length_31 = __e_acsl_block_length((void *)pi);
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_32,
-                       __gen_e_acsl_block_length_31);
-    __gen_e_acsl_block_length_33 = __e_acsl_block_length((void *)(& l));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_34,
-                       __gen_e_acsl_block_length_33);
-    __gen_e_acsl_eq_13 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_32),
-                                    (__mpz_struct const *)(__gen_e_acsl_block_length_34));
-    __e_acsl_assert(__gen_e_acsl_eq_13 == 0,(char *)"Assertion",
-                    (char *)"main",
+    unsigned long __gen_e_acsl_block_length_16;
+    unsigned long __gen_e_acsl_block_length_17;
+    __gen_e_acsl_block_length_16 = __e_acsl_block_length((void *)pi);
+    __gen_e_acsl_block_length_17 = __e_acsl_block_length((void *)(& l));
+    __e_acsl_assert(__gen_e_acsl_block_length_16 == __gen_e_acsl_block_length_17,
+                    (char *)"Assertion",(char *)"main",
                     (char *)"\\block_length(pi) == \\block_length(&l)",40);
-    __gmpz_clear(__gen_e_acsl_block_length_32);
-    __gmpz_clear(__gen_e_acsl_block_length_34);
   }
   size = (unsigned long)12;
   __e_acsl_full_init((void *)(& p));
   p = (char *)__gen_e_acsl_malloc(size);
   /*@ assert \block_length(p) ≡ size; */
   {
-    unsigned long __gen_e_acsl_block_length_35;
-    mpz_t __gen_e_acsl_block_length_36;
-    mpz_t __gen_e_acsl_size;
-    int __gen_e_acsl_eq_14;
-    __gen_e_acsl_block_length_35 = __e_acsl_block_length((void *)p);
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_36,
-                       __gen_e_acsl_block_length_35);
-    __gmpz_init_set_ui(__gen_e_acsl_size,size);
-    __gen_e_acsl_eq_14 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_36),
-                                    (__mpz_struct const *)(__gen_e_acsl_size));
-    __e_acsl_assert(__gen_e_acsl_eq_14 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_18;
+    __gen_e_acsl_block_length_18 = __e_acsl_block_length((void *)p);
+    __e_acsl_assert(__gen_e_acsl_block_length_18 == size,(char *)"Assertion",
                     (char *)"main",(char *)"\\block_length(p) == size",45);
-    __gmpz_clear(__gen_e_acsl_block_length_36);
-    __gmpz_clear(__gen_e_acsl_size);
   }
   /*@ assert \block_length(p+11) ≡ size; */
   {
-    unsigned long __gen_e_acsl_block_length_37;
-    mpz_t __gen_e_acsl_block_length_38;
-    mpz_t __gen_e_acsl_size_2;
-    int __gen_e_acsl_eq_15;
-    __gen_e_acsl_block_length_37 = __e_acsl_block_length((void *)(p + 11));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_38,
-                       __gen_e_acsl_block_length_37);
-    __gmpz_init_set_ui(__gen_e_acsl_size_2,size);
-    __gen_e_acsl_eq_15 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_38),
-                                    (__mpz_struct const *)(__gen_e_acsl_size_2));
-    __e_acsl_assert(__gen_e_acsl_eq_15 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_19;
+    __gen_e_acsl_block_length_19 = __e_acsl_block_length((void *)(p + 11));
+    __e_acsl_assert(__gen_e_acsl_block_length_19 == size,(char *)"Assertion",
                     (char *)"main",(char *)"\\block_length(p+11) == size",46);
-    __gmpz_clear(__gen_e_acsl_block_length_38);
-    __gmpz_clear(__gen_e_acsl_size_2);
   }
   __e_acsl_full_init((void *)(& p));
   p += 5;
   /*@ assert \block_length(p+5) ≡ \block_length(p-5); */
   {
-    unsigned long __gen_e_acsl_block_length_39;
-    mpz_t __gen_e_acsl_block_length_40;
-    unsigned long __gen_e_acsl_block_length_41;
-    mpz_t __gen_e_acsl_block_length_42;
-    int __gen_e_acsl_eq_16;
-    __gen_e_acsl_block_length_39 = __e_acsl_block_length((void *)(p + 5));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_40,
-                       __gen_e_acsl_block_length_39);
-    __gen_e_acsl_block_length_41 = __e_acsl_block_length((void *)(p - 5));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_42,
-                       __gen_e_acsl_block_length_41);
-    __gen_e_acsl_eq_16 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_40),
-                                    (__mpz_struct const *)(__gen_e_acsl_block_length_42));
-    __e_acsl_assert(__gen_e_acsl_eq_16 == 0,(char *)"Assertion",
-                    (char *)"main",
+    unsigned long __gen_e_acsl_block_length_20;
+    unsigned long __gen_e_acsl_block_length_21;
+    __gen_e_acsl_block_length_20 = __e_acsl_block_length((void *)(p + 5));
+    __gen_e_acsl_block_length_21 = __e_acsl_block_length((void *)(p - 5));
+    __e_acsl_assert(__gen_e_acsl_block_length_20 == __gen_e_acsl_block_length_21,
+                    (char *)"Assertion",(char *)"main",
                     (char *)"\\block_length(p+5) == \\block_length(p-5)",48);
-    __gmpz_clear(__gen_e_acsl_block_length_40);
-    __gmpz_clear(__gen_e_acsl_block_length_42);
   }
   size = (unsigned long)30 * sizeof(long);
   __e_acsl_full_init((void *)(& q));
   q = (long *)__gen_e_acsl_malloc(size);
   /*@ assert \block_length(q) ≡ size; */
   {
-    unsigned long __gen_e_acsl_block_length_43;
-    mpz_t __gen_e_acsl_block_length_44;
-    mpz_t __gen_e_acsl_size_3;
-    int __gen_e_acsl_eq_17;
-    __gen_e_acsl_block_length_43 = __e_acsl_block_length((void *)q);
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_44,
-                       __gen_e_acsl_block_length_43);
-    __gmpz_init_set_ui(__gen_e_acsl_size_3,size);
-    __gen_e_acsl_eq_17 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_44),
-                                    (__mpz_struct const *)(__gen_e_acsl_size_3));
-    __e_acsl_assert(__gen_e_acsl_eq_17 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_22;
+    __gen_e_acsl_block_length_22 = __e_acsl_block_length((void *)q);
+    __e_acsl_assert(__gen_e_acsl_block_length_22 == size,(char *)"Assertion",
                     (char *)"main",(char *)"\\block_length(q) == size",54);
-    __gmpz_clear(__gen_e_acsl_block_length_44);
-    __gmpz_clear(__gen_e_acsl_size_3);
   }
   __e_acsl_full_init((void *)(& q));
   q += 4;
   /*@ assert \block_length(q) ≡ size; */
   {
-    unsigned long __gen_e_acsl_block_length_45;
-    mpz_t __gen_e_acsl_block_length_46;
-    mpz_t __gen_e_acsl_size_4;
-    int __gen_e_acsl_eq_18;
-    __gen_e_acsl_block_length_45 = __e_acsl_block_length((void *)q);
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_46,
-                       __gen_e_acsl_block_length_45);
-    __gmpz_init_set_ui(__gen_e_acsl_size_4,size);
-    __gen_e_acsl_eq_18 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_46),
-                                    (__mpz_struct const *)(__gen_e_acsl_size_4));
-    __e_acsl_assert(__gen_e_acsl_eq_18 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_23;
+    __gen_e_acsl_block_length_23 = __e_acsl_block_length((void *)q);
+    __e_acsl_assert(__gen_e_acsl_block_length_23 == size,(char *)"Assertion",
                     (char *)"main",(char *)"\\block_length(q) == size",56);
-    __gmpz_clear(__gen_e_acsl_block_length_46);
-    __gmpz_clear(__gen_e_acsl_size_4);
   }
   /*@ assert \block_length(&ZERO) ≡ 0; */
   {
-    unsigned long __gen_e_acsl_block_length_47;
-    mpz_t __gen_e_acsl_block_length_48;
-    mpz_t __gen_e_acsl_;
-    int __gen_e_acsl_eq_19;
-    __gen_e_acsl_block_length_47 = __e_acsl_block_length((void *)(& ZERO));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_48,
-                       __gen_e_acsl_block_length_47);
-    __gmpz_init_set_si(__gen_e_acsl_,(long)0);
-    __gen_e_acsl_eq_19 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_48),
-                                    (__mpz_struct const *)(__gen_e_acsl_));
-    __e_acsl_assert(__gen_e_acsl_eq_19 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_24;
+    __gen_e_acsl_block_length_24 = __e_acsl_block_length((void *)(& ZERO));
+    __e_acsl_assert(__gen_e_acsl_block_length_24 == 0,(char *)"Assertion",
                     (char *)"main",(char *)"\\block_length(&ZERO) == 0",60);
-    __gmpz_clear(__gen_e_acsl_block_length_48);
-    __gmpz_clear(__gen_e_acsl_);
   }
   /*@ assert \block_length(&zero) ≡ 0; */
   {
-    unsigned long __gen_e_acsl_block_length_49;
-    mpz_t __gen_e_acsl_block_length_50;
-    mpz_t __gen_e_acsl__2;
-    int __gen_e_acsl_eq_20;
-    __gen_e_acsl_block_length_49 = __e_acsl_block_length((void *)(& zero));
-    __gmpz_init_set_ui(__gen_e_acsl_block_length_50,
-                       __gen_e_acsl_block_length_49);
-    __gmpz_init_set_si(__gen_e_acsl__2,(long)0);
-    __gen_e_acsl_eq_20 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_block_length_50),
-                                    (__mpz_struct const *)(__gen_e_acsl__2));
-    __e_acsl_assert(__gen_e_acsl_eq_20 == 0,(char *)"Assertion",
+    unsigned long __gen_e_acsl_block_length_25;
+    __gen_e_acsl_block_length_25 = __e_acsl_block_length((void *)(& zero));
+    __e_acsl_assert(__gen_e_acsl_block_length_25 == 0,(char *)"Assertion",
                     (char *)"main",(char *)"\\block_length(&zero) == 0",61);
-    __gmpz_clear(__gen_e_acsl_block_length_50);
-    __gmpz_clear(__gen_e_acsl__2);
   }
   __retres = 0;
   __e_acsl_delete_block((void *)(& ZERO));
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/initialized.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/initialized.res.oracle
index 5887eacd773..5be3ab147a5 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/initialized.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/initialized.res.oracle
@@ -26,13 +26,15 @@ FRAMAC_SHARE/libc/stdlib.h:213:[e-acsl] warning: E-ACSL construct `complete beha
                   Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:213:[e-acsl] warning: E-ACSL construct `disjoint behaviors' is not yet supported.
                   Ignoring annotation.
-FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
+FRAMAC_SHARE/libc/stdlib.h:179:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
                   Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `\allocate' is not yet supported. Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `complete behaviors' is not yet supported.
                   Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `disjoint behaviors' is not yet supported.
                   Ignoring annotation.
+FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
+                  Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:161:[e-acsl] warning: E-ACSL construct `logic function application' is not yet supported.
                   Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:161:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/vector.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/vector.res.oracle
index c8caafe3a83..8ea825d52a8 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/vector.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/vector.res.oracle
@@ -5,13 +5,15 @@ tests/e-acsl-runtime/vector.c:28:[e-acsl] warning: E-ACSL construct `complete be
                   Ignoring annotation.
 tests/e-acsl-runtime/vector.c:28:[e-acsl] warning: E-ACSL construct `disjoint behaviors' is not yet supported.
                   Ignoring annotation.
-FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
+FRAMAC_SHARE/libc/stdlib.h:179:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
                   Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `\allocate' is not yet supported. Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `complete behaviors' is not yet supported.
                   Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `disjoint behaviors' is not yet supported.
                   Ignoring annotation.
+FRAMAC_SHARE/libc/stdlib.h:178:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
+                  Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:161:[e-acsl] warning: E-ACSL construct `logic function application' is not yet supported.
                   Ignoring annotation.
 FRAMAC_SHARE/libc/stdlib.h:161:[e-acsl] warning: E-ACSL construct `assigns clause in behavior' is not yet supported.
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/comparison.1.res.oracle b/src/plugins/e-acsl/tests/gmp/oracle/comparison.1.res.oracle
index bbd8afb45e9..5b573d17ea2 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/comparison.1.res.oracle
+++ b/src/plugins/e-acsl/tests/gmp/oracle/comparison.1.res.oracle
@@ -15,6 +15,7 @@
 [value] using specification for function __e_acsl_assert
 FRAMAC_SHARE/e-acsl/e_acsl.h:43:[value] warning: function __e_acsl_assert: precondition got status unknown.
 [value] using specification for function __gmpz_clear
+[value] using specification for function __gmpz_init_set_ui
 [value] using specification for function __gmpz_init
 [value] using specification for function __gmpz_neg
 [value] done for function main
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/gen_comparison2.c b/src/plugins/e-acsl/tests/gmp/oracle/gen_comparison2.c
index 778c9c3e56a..10820363da0 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/gen_comparison2.c
+++ b/src/plugins/e-acsl/tests/gmp/oracle/gen_comparison2.c
@@ -41,7 +41,7 @@ int main(void)
     mpz_t __gen_e_acsl_;
     int __gen_e_acsl_le;
     __gmpz_init_set_si(__gen_e_acsl_x_3,(long)x);
-    __gmpz_init_set_si(__gen_e_acsl_,(long)0);
+    __gmpz_init_set_ui(__gen_e_acsl_,(unsigned long)0);
     __gen_e_acsl_le = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_x_3),
                                  (__mpz_struct const *)(__gen_e_acsl_));
     __e_acsl_assert(__gen_e_acsl_le <= 0,(char *)"Assertion",(char *)"main",
@@ -55,7 +55,7 @@ int main(void)
     mpz_t __gen_e_acsl__2;
     int __gen_e_acsl_ge;
     __gmpz_init_set_si(__gen_e_acsl_y_3,(long)y);
-    __gmpz_init_set_si(__gen_e_acsl__2,(long)1);
+    __gmpz_init_set_ui(__gen_e_acsl__2,(unsigned long)1);
     __gen_e_acsl_ge = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_y_3),
                                  (__mpz_struct const *)(__gen_e_acsl__2));
     __e_acsl_assert(__gen_e_acsl_ge >= 0,(char *)"Assertion",(char *)"main",
@@ -72,8 +72,8 @@ int main(void)
     mpz_t __gen_e_acsl__3;
     mpz_t __gen_e_acsl__4;
     int __gen_e_acsl_lt_2;
-    __gmpz_init_set_si(__gen_e_acsl__3,(long)5);
-    __gmpz_init_set_si(__gen_e_acsl__4,(long)18);
+    __gmpz_init_set_ui(__gen_e_acsl__3,(unsigned long)5);
+    __gmpz_init_set_ui(__gen_e_acsl__4,(unsigned long)18);
     __gen_e_acsl_lt_2 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__3),
                                    (__mpz_struct const *)(__gen_e_acsl__4));
     __e_acsl_assert(__gen_e_acsl_lt_2 < 0,(char *)"Assertion",(char *)"main",
@@ -86,8 +86,8 @@ int main(void)
     mpz_t __gen_e_acsl__5;
     mpz_t __gen_e_acsl__6;
     int __gen_e_acsl_gt_2;
-    __gmpz_init_set_si(__gen_e_acsl__5,(long)32);
-    __gmpz_init_set_si(__gen_e_acsl__6,(long)3);
+    __gmpz_init_set_ui(__gen_e_acsl__5,(unsigned long)32);
+    __gmpz_init_set_ui(__gen_e_acsl__6,(unsigned long)3);
     __gen_e_acsl_gt_2 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__5),
                                    (__mpz_struct const *)(__gen_e_acsl__6));
     __e_acsl_assert(__gen_e_acsl_gt_2 > 0,(char *)"Assertion",(char *)"main",
@@ -100,8 +100,8 @@ int main(void)
     mpz_t __gen_e_acsl__7;
     mpz_t __gen_e_acsl__8;
     int __gen_e_acsl_le_2;
-    __gmpz_init_set_si(__gen_e_acsl__7,(long)12);
-    __gmpz_init_set_si(__gen_e_acsl__8,(long)13);
+    __gmpz_init_set_ui(__gen_e_acsl__7,(unsigned long)12);
+    __gmpz_init_set_ui(__gen_e_acsl__8,(unsigned long)13);
     __gen_e_acsl_le_2 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__7),
                                    (__mpz_struct const *)(__gen_e_acsl__8));
     __e_acsl_assert(__gen_e_acsl_le_2 <= 0,(char *)"Assertion",
@@ -114,8 +114,8 @@ int main(void)
     mpz_t __gen_e_acsl__9;
     mpz_t __gen_e_acsl__10;
     int __gen_e_acsl_ge_2;
-    __gmpz_init_set_si(__gen_e_acsl__9,(long)123);
-    __gmpz_init_set_si(__gen_e_acsl__10,(long)12);
+    __gmpz_init_set_ui(__gen_e_acsl__9,(unsigned long)123);
+    __gmpz_init_set_ui(__gen_e_acsl__10,(unsigned long)12);
     __gen_e_acsl_ge_2 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__9),
                                    (__mpz_struct const *)(__gen_e_acsl__10));
     __e_acsl_assert(__gen_e_acsl_ge_2 >= 0,(char *)"Assertion",
@@ -127,7 +127,7 @@ int main(void)
   {
     mpz_t __gen_e_acsl__11;
     int __gen_e_acsl_eq;
-    __gmpz_init_set_si(__gen_e_acsl__11,(long)0xff);
+    __gmpz_init_set_ui(__gen_e_acsl__11,(unsigned long)0xff);
     __gen_e_acsl_eq = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__11),
                                  (__mpz_struct const *)(__gen_e_acsl__11));
     __e_acsl_assert(__gen_e_acsl_eq == 0,(char *)"Assertion",(char *)"main",
@@ -139,8 +139,8 @@ int main(void)
     mpz_t __gen_e_acsl__12;
     mpz_t __gen_e_acsl__13;
     int __gen_e_acsl_ne;
-    __gmpz_init_set_si(__gen_e_acsl__12,(long)1);
-    __gmpz_init_set_si(__gen_e_acsl__13,(long)2);
+    __gmpz_init_set_ui(__gen_e_acsl__12,(unsigned long)1);
+    __gmpz_init_set_ui(__gen_e_acsl__13,(unsigned long)2);
     __gen_e_acsl_ne = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__12),
                                  (__mpz_struct const *)(__gen_e_acsl__13));
     __e_acsl_assert(__gen_e_acsl_ne != 0,(char *)"Assertion",(char *)"main",
@@ -154,10 +154,10 @@ int main(void)
     mpz_t __gen_e_acsl_neg;
     mpz_t __gen_e_acsl__15;
     int __gen_e_acsl_lt_3;
-    __gmpz_init_set_si(__gen_e_acsl__14,(long)5);
+    __gmpz_init_set_ui(__gen_e_acsl__14,(unsigned long)5);
     __gmpz_init(__gen_e_acsl_neg);
     __gmpz_neg(__gen_e_acsl_neg,(__mpz_struct const *)(__gen_e_acsl__14));
-    __gmpz_init_set_si(__gen_e_acsl__15,(long)18);
+    __gmpz_init_set_ui(__gen_e_acsl__15,(unsigned long)18);
     __gen_e_acsl_lt_3 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_neg),
                                    (__mpz_struct const *)(__gen_e_acsl__15));
     __e_acsl_assert(__gen_e_acsl_lt_3 < 0,(char *)"Assertion",(char *)"main",
@@ -172,8 +172,8 @@ int main(void)
     mpz_t __gen_e_acsl__17;
     mpz_t __gen_e_acsl_neg_2;
     int __gen_e_acsl_gt_3;
-    __gmpz_init_set_si(__gen_e_acsl__16,(long)32);
-    __gmpz_init_set_si(__gen_e_acsl__17,(long)3);
+    __gmpz_init_set_ui(__gen_e_acsl__16,(unsigned long)32);
+    __gmpz_init_set_ui(__gen_e_acsl__17,(unsigned long)3);
     __gmpz_init(__gen_e_acsl_neg_2);
     __gmpz_neg(__gen_e_acsl_neg_2,(__mpz_struct const *)(__gen_e_acsl__17));
     __gen_e_acsl_gt_3 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__16),
@@ -190,10 +190,10 @@ int main(void)
     mpz_t __gen_e_acsl_neg_3;
     mpz_t __gen_e_acsl__19;
     int __gen_e_acsl_le_3;
-    __gmpz_init_set_si(__gen_e_acsl__18,(long)12);
+    __gmpz_init_set_ui(__gen_e_acsl__18,(unsigned long)12);
     __gmpz_init(__gen_e_acsl_neg_3);
     __gmpz_neg(__gen_e_acsl_neg_3,(__mpz_struct const *)(__gen_e_acsl__18));
-    __gmpz_init_set_si(__gen_e_acsl__19,(long)13);
+    __gmpz_init_set_ui(__gen_e_acsl__19,(unsigned long)13);
     __gen_e_acsl_le_3 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_neg_3),
                                    (__mpz_struct const *)(__gen_e_acsl__19));
     __e_acsl_assert(__gen_e_acsl_le_3 <= 0,(char *)"Assertion",
@@ -208,8 +208,8 @@ int main(void)
     mpz_t __gen_e_acsl__21;
     mpz_t __gen_e_acsl_neg_4;
     int __gen_e_acsl_ge_3;
-    __gmpz_init_set_si(__gen_e_acsl__20,(long)123);
-    __gmpz_init_set_si(__gen_e_acsl__21,(long)12);
+    __gmpz_init_set_ui(__gen_e_acsl__20,(unsigned long)123);
+    __gmpz_init_set_ui(__gen_e_acsl__21,(unsigned long)12);
     __gmpz_init(__gen_e_acsl_neg_4);
     __gmpz_neg(__gen_e_acsl_neg_4,(__mpz_struct const *)(__gen_e_acsl__21));
     __gen_e_acsl_ge_3 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__20),
@@ -225,7 +225,7 @@ int main(void)
     mpz_t __gen_e_acsl__22;
     mpz_t __gen_e_acsl_neg_5;
     int __gen_e_acsl_eq_2;
-    __gmpz_init_set_si(__gen_e_acsl__22,(long)0xff);
+    __gmpz_init_set_ui(__gen_e_acsl__22,(unsigned long)0xff);
     __gmpz_init(__gen_e_acsl_neg_5);
     __gmpz_neg(__gen_e_acsl_neg_5,(__mpz_struct const *)(__gen_e_acsl__22));
     __gen_e_acsl_eq_2 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_neg_5),
@@ -241,8 +241,8 @@ int main(void)
     mpz_t __gen_e_acsl__24;
     mpz_t __gen_e_acsl_neg_6;
     int __gen_e_acsl_ne_2;
-    __gmpz_init_set_si(__gen_e_acsl__23,(long)1);
-    __gmpz_init_set_si(__gen_e_acsl__24,(long)2);
+    __gmpz_init_set_ui(__gen_e_acsl__23,(unsigned long)1);
+    __gmpz_init_set_ui(__gen_e_acsl__24,(unsigned long)2);
     __gmpz_init(__gen_e_acsl_neg_6);
     __gmpz_neg(__gen_e_acsl_neg_6,(__mpz_struct const *)(__gen_e_acsl__24));
     __gen_e_acsl_ne_2 = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__23),
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/gen_integer_constant2.c b/src/plugins/e-acsl/tests/gmp/oracle/gen_integer_constant2.c
index 28047909daa..74ca167908e 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/gen_integer_constant2.c
+++ b/src/plugins/e-acsl/tests/gmp/oracle/gen_integer_constant2.c
@@ -7,7 +7,7 @@ int main(void)
   {
     mpz_t __gen_e_acsl_;
     int __gen_e_acsl_eq;
-    __gmpz_init_set_si(__gen_e_acsl_,(long)0);
+    __gmpz_init_set_ui(__gen_e_acsl_,(unsigned long)0);
     __gen_e_acsl_eq = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_),
                                  (__mpz_struct const *)(__gen_e_acsl_));
     __e_acsl_assert(__gen_e_acsl_eq == 0,(char *)"Assertion",(char *)"main",
@@ -21,8 +21,8 @@ int main(void)
     mpz_t __gen_e_acsl__2;
     mpz_t __gen_e_acsl__3;
     int __gen_e_acsl_ne;
-    __gmpz_init_set_si(__gen_e_acsl__2,(long)0);
-    __gmpz_init_set_si(__gen_e_acsl__3,(long)1);
+    __gmpz_init_set_ui(__gen_e_acsl__2,(unsigned long)0);
+    __gmpz_init_set_ui(__gen_e_acsl__3,(unsigned long)1);
     __gen_e_acsl_ne = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl__2),
                                  (__mpz_struct const *)(__gen_e_acsl__3));
     __e_acsl_assert(__gen_e_acsl_ne != 0,(char *)"Assertion",(char *)"main",
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/gen_longlong.c b/src/plugins/e-acsl/tests/gmp/oracle/gen_longlong.c
index 80d96913a91..78842be2f71 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/gen_longlong.c
+++ b/src/plugins/e-acsl/tests/gmp/oracle/gen_longlong.c
@@ -39,17 +39,17 @@ int main(void)
     int __gen_e_acsl_mod_guard;
     mpz_t __gen_e_acsl_mod;
     unsigned long __gen_e_acsl__4;
-    __gmpz_init_set_si(__gen_e_acsl_,(long)2);
+    __gmpz_init_set_ui(__gen_e_acsl_,(unsigned long)2);
     __gmpz_init(__gen_e_acsl_x);
     __gmpz_import(__gen_e_acsl_x,1UL,1,8UL,0,0UL,(void const *)(& x));
     __gmpz_init(__gen_e_acsl_mul);
     __gmpz_mul(__gen_e_acsl_mul,(__mpz_struct const *)(__gen_e_acsl_),
                (__mpz_struct const *)(__gen_e_acsl_x));
-    __gmpz_init_set_si(__gen_e_acsl__2,(long)1);
+    __gmpz_init_set_ui(__gen_e_acsl__2,(unsigned long)1);
     __gmpz_init(__gen_e_acsl_add);
     __gmpz_add(__gen_e_acsl_add,(__mpz_struct const *)(__gen_e_acsl_mul),
                (__mpz_struct const *)(__gen_e_acsl__2));
-    __gmpz_init_set_si(__gen_e_acsl__3,0L);
+    __gmpz_init_set_ui(__gen_e_acsl__3,0UL);
     __gen_e_acsl_mod_guard = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_),
                                         (__mpz_struct const *)(__gen_e_acsl__3));
     __gmpz_init(__gen_e_acsl_mod);
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/gen_longlong2.c b/src/plugins/e-acsl/tests/gmp/oracle/gen_longlong2.c
index d086ece432a..11dd13abee4 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/gen_longlong2.c
+++ b/src/plugins/e-acsl/tests/gmp/oracle/gen_longlong2.c
@@ -39,17 +39,17 @@ int main(void)
     int __gen_e_acsl_mod_guard;
     mpz_t __gen_e_acsl_mod;
     int __gen_e_acsl_eq;
-    __gmpz_init_set_si(__gen_e_acsl_,(long)2);
+    __gmpz_init_set_ui(__gen_e_acsl_,(unsigned long)2);
     __gmpz_init(__gen_e_acsl_x);
     __gmpz_import(__gen_e_acsl_x,1UL,1,8UL,0,0UL,(void const *)(& x));
     __gmpz_init(__gen_e_acsl_mul);
     __gmpz_mul(__gen_e_acsl_mul,(__mpz_struct const *)(__gen_e_acsl_),
                (__mpz_struct const *)(__gen_e_acsl_x));
-    __gmpz_init_set_si(__gen_e_acsl__2,(long)1);
+    __gmpz_init_set_ui(__gen_e_acsl__2,(unsigned long)1);
     __gmpz_init(__gen_e_acsl_add);
     __gmpz_add(__gen_e_acsl_add,(__mpz_struct const *)(__gen_e_acsl_mul),
                (__mpz_struct const *)(__gen_e_acsl__2));
-    __gmpz_init_set_si(__gen_e_acsl__3,0L);
+    __gmpz_init_set_ui(__gen_e_acsl__3,0UL);
     __gen_e_acsl_mod_guard = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_),
                                         (__mpz_struct const *)(__gen_e_acsl__3));
     __gmpz_init(__gen_e_acsl_mod);
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/gen_not2.c b/src/plugins/e-acsl/tests/gmp/oracle/gen_not2.c
index 8ee1e05a971..f1e22043fb6 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/gen_not2.c
+++ b/src/plugins/e-acsl/tests/gmp/oracle/gen_not2.c
@@ -10,7 +10,7 @@ int main(void)
     mpz_t __gen_e_acsl_;
     int __gen_e_acsl_eq;
     __gmpz_init_set_si(__gen_e_acsl_x,(long)x);
-    __gmpz_init_set_si(__gen_e_acsl_,0L);
+    __gmpz_init_set_ui(__gen_e_acsl_,0UL);
     __gen_e_acsl_eq = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_x),
                                  (__mpz_struct const *)(__gen_e_acsl_));
     __e_acsl_assert(__gen_e_acsl_eq == 0,(char *)"Assertion",(char *)"main",
@@ -25,7 +25,7 @@ int main(void)
       mpz_t __gen_e_acsl__2;
       int __gen_e_acsl_ne;
       __gmpz_init_set_si(__gen_e_acsl_x_2,(long)x);
-      __gmpz_init_set_si(__gen_e_acsl__2,0L);
+      __gmpz_init_set_ui(__gen_e_acsl__2,0UL);
       __gen_e_acsl_ne = __gmpz_cmp((__mpz_struct const *)(__gen_e_acsl_x_2),
                                    (__mpz_struct const *)(__gen_e_acsl__2));
       __e_acsl_assert(__gen_e_acsl_ne != 0,(char *)"Assertion",
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/integer_constant.1.res.oracle b/src/plugins/e-acsl/tests/gmp/oracle/integer_constant.1.res.oracle
index b2401c11ed4..a27112ee0f4 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/integer_constant.1.res.oracle
+++ b/src/plugins/e-acsl/tests/gmp/oracle/integer_constant.1.res.oracle
@@ -10,11 +10,10 @@
   __e_acsl_init ∈ [--..--]
   __e_acsl_internal_heap ∈ [--..--]
   __e_acsl_heap_size ∈ [--..--]
-[value] using specification for function __gmpz_init_set_si
+[value] using specification for function __gmpz_init_set_ui
 [value] using specification for function __gmpz_cmp
 [value] using specification for function __e_acsl_assert
 FRAMAC_SHARE/e-acsl/e_acsl.h:43:[value] warning: function __e_acsl_assert: precondition got status unknown.
 [value] using specification for function __gmpz_clear
-[value] using specification for function __gmpz_init_set_ui
 [value] using specification for function __gmpz_init_set_str
 [value] done for function main
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/longlong.0.res.oracle b/src/plugins/e-acsl/tests/gmp/oracle/longlong.0.res.oracle
index 2aa07b37357..427396a3100 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/longlong.0.res.oracle
+++ b/src/plugins/e-acsl/tests/gmp/oracle/longlong.0.res.oracle
@@ -16,9 +16,9 @@ tests/gmp/longlong.i:9:[value] warning: recursive call during value analysis
 [value] user error: Recursive call on an unspecified function. Using potentially invalid
                     inferred assigns 'assigns \result \from x, n;'
 [value] using specification for function my_pow
-tests/gmp/longlong.i:10:[value] warning: signed overflow. assert -2147483648 ≤ tmp*tmp;
-tests/gmp/longlong.i:10:[value] warning: signed overflow. assert tmp*tmp ≤ 2147483647;
-[value] using specification for function __gmpz_init_set_si
+tests/gmp/longlong.i:10:[kernel] warning: signed overflow. assert -2147483648 ≤ tmp*tmp;
+tests/gmp/longlong.i:10:[kernel] warning: signed overflow. assert tmp*tmp ≤ 2147483647;
+[value] using specification for function __gmpz_init_set_ui
 [value] using specification for function __gmpz_init
 [value] using specification for function __gmpz_import
 FRAMAC_SHARE/e-acsl/e_acsl_gmp.h:88:[value] warning: function __gmpz_import: precondition got status unknown.
@@ -29,7 +29,7 @@ FRAMAC_SHARE/e-acsl/e_acsl_gmp.h:88:[value] warning: function __gmpz_import: pre
 FRAMAC_SHARE/e-acsl/e_acsl.h:43:[value] warning: function __e_acsl_assert: precondition got status unknown.
 [value] using specification for function __gmpz_tdiv_r
 [value] using specification for function __gmpz_get_ui
-tests/gmp/longlong.i:17:[value] warning: pointer comparison.
-                 assert \pointer_comparable((void *)__gen_e_acsl__4, (void *)1);
+tests/gmp/longlong.i:17:[kernel] warning: pointer comparison.
+                  assert \pointer_comparable((void *)__gen_e_acsl__4, (void *)1);
 [value] using specification for function __gmpz_clear
 [value] done for function main
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/longlong.1.res.oracle b/src/plugins/e-acsl/tests/gmp/oracle/longlong.1.res.oracle
index cb8aca989bc..e24d41cefb7 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/longlong.1.res.oracle
+++ b/src/plugins/e-acsl/tests/gmp/oracle/longlong.1.res.oracle
@@ -16,9 +16,9 @@ tests/gmp/longlong.i:9:[value] warning: recursive call during value analysis
 [value] user error: Recursive call on an unspecified function. Using potentially invalid
                     inferred assigns 'assigns \result \from x, n;'
 [value] using specification for function my_pow
-tests/gmp/longlong.i:10:[value] warning: signed overflow. assert -2147483648 ≤ tmp*tmp;
-tests/gmp/longlong.i:10:[value] warning: signed overflow. assert tmp*tmp ≤ 2147483647;
-[value] using specification for function __gmpz_init_set_si
+tests/gmp/longlong.i:10:[kernel] warning: signed overflow. assert -2147483648 ≤ tmp*tmp;
+tests/gmp/longlong.i:10:[kernel] warning: signed overflow. assert tmp*tmp ≤ 2147483647;
+[value] using specification for function __gmpz_init_set_ui
 [value] using specification for function __gmpz_init
 [value] using specification for function __gmpz_import
 FRAMAC_SHARE/e-acsl/e_acsl_gmp.h:88:[value] warning: function __gmpz_import: precondition got status unknown.
@@ -28,7 +28,7 @@ FRAMAC_SHARE/e-acsl/e_acsl_gmp.h:88:[value] warning: function __gmpz_import: pre
 [value] using specification for function __e_acsl_assert
 FRAMAC_SHARE/e-acsl/e_acsl.h:43:[value] warning: function __e_acsl_assert: precondition got status unknown.
 [value] using specification for function __gmpz_tdiv_r
-tests/gmp/longlong.i:17:[value] warning: pointer comparison.
-                 assert \pointer_comparable((void *)__gen_e_acsl_eq, (void *)0);
+tests/gmp/longlong.i:17:[kernel] warning: pointer comparison.
+                  assert \pointer_comparable((void *)__gen_e_acsl_eq, (void *)0);
 [value] using specification for function __gmpz_clear
 [value] done for function main
diff --git a/src/plugins/e-acsl/tests/gmp/oracle/not.1.res.oracle b/src/plugins/e-acsl/tests/gmp/oracle/not.1.res.oracle
index 35b4ab588d7..97d849b1076 100644
--- a/src/plugins/e-acsl/tests/gmp/oracle/not.1.res.oracle
+++ b/src/plugins/e-acsl/tests/gmp/oracle/not.1.res.oracle
@@ -11,6 +11,7 @@
   __e_acsl_internal_heap ∈ [--..--]
   __e_acsl_heap_size ∈ [--..--]
 [value] using specification for function __gmpz_init_set_si
+[value] using specification for function __gmpz_init_set_ui
 [value] using specification for function __gmpz_cmp
 [value] using specification for function __e_acsl_assert
 FRAMAC_SHARE/e-acsl/e_acsl.h:43:[value] warning: function __e_acsl_assert: precondition got status unknown.
diff --git a/src/plugins/e-acsl/translate.ml b/src/plugins/e-acsl/translate.ml
index 78485b2682e..e108cf1e259 100644
--- a/src/plugins/e-acsl/translate.ml
+++ b/src/plugins/e-acsl/translate.ml
@@ -300,7 +300,7 @@ and context_insensitive_term_to_exp kf env t =
       let zero = Logic_const.tinteger 0 in
       let e, env =
         comparison_to_exp
-          kf ~loc ~name:"not" env New_typing.Gmp Eq t zero (Some t)
+          kf ~loc ~name:"not" env New_typing.gmp Eq t zero (Some t)
       in
       e, env, false, ""
     else begin
@@ -346,7 +346,7 @@ and context_insensitive_term_to_exp kf env t =
       (* do not generate [e2] from [t2] twice *)
       let guard, env =
         let name = name_of_binop bop ^ "_guard" in
-        comparison_to_exp ~loc kf env New_typing.Gmp ~e1:e2 ~name Eq t2 zero t
+        comparison_to_exp ~loc kf env New_typing.gmp ~e1:e2 ~name Eq t2 zero t
       in
       let mk_stmts _v e = 
 	assert (Gmpz.is_t ty);
@@ -798,13 +798,13 @@ exception No_simple_translation of term
 (* This function is used by plug-in [Cfp]. *)
 let term_to_exp typ t =
   let ctx = match typ with
-    | None -> New_typing.C_type IInt (* useless, but required *)
+    | None -> New_typing.c_int (* useless, but required *)
     | Some typ ->
-      if Gmpz.is_t typ then New_typing.Gmp
+      if Gmpz.is_t typ then New_typing.gmp
       else
         match typ with
-        | TInt(i, _) -> New_typing.C_type i
-        | _ -> New_typing.C_type IInt (* useless, but required *)
+        | TInt(ik, _) -> New_typing.ikind ik
+        | _ -> New_typing.c_int (* useless, but required *)
   in
   New_typing.type_term ~ctx t;
   let env = Env.empty (new Visitor.frama_c_copy Project_skeleton.dummy) in
-- 
GitLab