diff --git a/src/plugins/e-acsl/TODO b/src/plugins/e-acsl/TODO
index ccec0b43e6f6b4b8f9239cced908d73144d203fd..f2b0831be27079545fc61a38c280f7991a93b844 100644
--- a/src/plugins/e-acsl/TODO
+++ b/src/plugins/e-acsl/TODO
@@ -1,7 +1,8 @@
-- relation binaire sur les termes
 
-- use functions mpz_init_set* (optimization)
-      see http://gmplib.org/manual-4.3.2/Simultaneous-Integer-Init-_0026-Assign.html#Simultaneous-Integer-Init-_0026-Assign
+- déboguer opérateurs binaires logiques
+- tester les opérations binaires sur les pointeurs
+
+- amélioration des locs quand possible (genre Prel)
 
 - améliorer test "comparison.i" quand bug fixed #744
 - remettre test "cast.i" quand bug fixed #744
diff --git a/src/plugins/e-acsl/share/e_acsl.h b/src/plugins/e-acsl/share/e_acsl.h
index 9969d4680907e05ea66da5e8601bea9608b2a8ac..3adf7bdabf0badcc8e9c130841dff864215b7d87 100644
--- a/src/plugins/e-acsl/share/e_acsl.h
+++ b/src/plugins/e-acsl/share/e_acsl.h
@@ -24,14 +24,12 @@ typedef __mpz_struct mpz_t[1];
 /* GMP functions */
 /*****************/
 
+// initilializers
+
 /*@ ensures \valid(x);
   @ assigns *x; */
 extern void mpz_init(mpz_t x);
 
-/*@ requires \valid(x);
-  @ assigns *x; */
-extern void mpz_clear(mpz_t x);
-
 /*@ ensures \valid(z);
   @ assigns *z; */
 extern void mpz_init_set_ui(mpz_t z, unsigned long int n);
@@ -44,11 +42,59 @@ extern void mpz_init_set_si(mpz_t z, signed long int n);
   @ assigns *z; */
 extern void mpz_init_set_str(mpz_t z, char *str, int base);
 
+// finalizer
+
+/*@ requires \valid(x);
+  @ assigns *x; */
+extern void mpz_clear(mpz_t x);
+
+// logical and arithmetic operators
+
 /*@ requires \valid(z1);
   @ requires \valid(z2);
   @ assigns \nothing; */
 extern int mpz_cmp(mpz_t z1, mpz_t z2);
 
+/*@ requires \valid(z1);
+  @ requires \valid(z2);
+  @ assigns *z1; */
+extern int mpz_comp(mpz_t z1, mpz_t z2);
+
+/*@ requires \valid(z1);
+  @ requires \valid(z2);
+  @ assigns *z1; */
+extern int mpz_neg(mpz_t z1, mpz_t z2);
+
+/*@ requires \valid(z1);
+  @ requires \valid(z2);
+  @ requires \valid(z3);
+  @ assigns *z1; */
+extern int mpz_add(mpz_t z1, mpz_t z2, mpz_t z3);
+
+/*@ requires \valid(z1);
+  @ requires \valid(z2);
+  @ requires \valid(z3);
+  @ assigns *z1; */
+extern int mpz_sub(mpz_t z1, mpz_t z2, mpz_t z3);
+
+/*@ requires \valid(z1);
+  @ requires \valid(z2);
+  @ requires \valid(z3);
+  @ assigns *z1; */
+extern int mpz_mul(mpz_t z1, mpz_t z2, mpz_t z3);
+
+/*@ requires \valid(z1);
+  @ requires \valid(z2);
+  @ requires \valid(z3);
+  @ assigns *z1; */
+extern int mpz_cdiv_q(mpz_t z1, mpz_t z2, mpz_t z3);
+
+/*@ requires \valid(z1);
+  @ requires \valid(z2);
+  @ requires \valid(z3);
+  @ assigns *z1; */
+extern int mpz_mod(mpz_t z1, mpz_t z2, mpz_t z3);
+
 /************************/
 /* Standard C functions */
 /************************/
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/arith.i b/src/plugins/e-acsl/tests/e-acsl-runtime/arith.i
new file mode 100644
index 0000000000000000000000000000000000000000..10af162d0fdd586ccbf313ce586dda1d046d8551
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/arith.i
@@ -0,0 +1,25 @@
+/* run.config
+   COMMENT: arithmetic operations */
+
+void main() {
+  int x = -3;
+  int y = 2;
+
+  /*@ assert -3 == x; */ ;
+  /*@ assert x == -3; */ ;
+  /*@ assert 0 != ~0; */ ;
+
+  /*@ assert x+1 == -2; */ ;
+  /*@ assert x-1 == -4; */ ;
+  /*@ assert x*3 == -9; */ ;
+  /*@ assert x/3 == -1; */ ;
+  /*@ assert x % 2 == -1; */ ;
+
+  /*@ assert x * 2 + (3 + y) - 4 + (x - y) == -10; */ ;
+
+  //  /*@ assert (0 == 1) == !(0 == 0); */ ;
+
+  //  /*@ assert 0 == !1; */ ;
+  /* subtyping relation: 0 should be promoted to boolean below
+     How to handle this? */
+}
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/addrOf.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/addrOf.res.oracle
index d9e881f796ca61d3748d6b994ffd18c8b3c6b673..259d9adf95c3b7e647ecc5b8d8a8683cb498916e 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/addrOf.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/addrOf.res.oracle
@@ -2,7 +2,7 @@
 [value] Computing initial state
 [value] Initial state computed
 [value] Values of globals at initialization
-PROJECT_FILE:75:[value] Assertion got status valid.
+PROJECT_FILE:121:[value] Assertion got status valid.
 [value] Recording results for main
 [value] done for function main
 [dominators] computing for function main
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/arith.err.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/arith.err.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/arith.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/arith.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..02dda29da5bde2d60059e3f57fe741b57235a9a2
--- /dev/null
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/arith.res.oracle
@@ -0,0 +1,918 @@
+[value] Analyzing a complete application starting at main
+[value] Computing initial state
+[value] Initial state computed
+[value] Values of globals at initialization
+PROJECT_FILE:123:[value] Assertion got status valid.
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:125.
+PROJECT_FILE:125:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:126.
+PROJECT_FILE:126:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_neg <-main.
+        Called from PROJECT_FILE:126.
+PROJECT_FILE:126:[value] Function mpz_neg: precondition got status valid
+[value] Done for function mpz_neg
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:127.
+PROJECT_FILE:127:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_cmp <-main.
+        Called from PROJECT_FILE:128.
+PROJECT_FILE:128:[value] Function mpz_cmp: precondition got status valid
+[value] Done for function mpz_cmp
+[value] computing for function e_acsl_fail <-main.
+        Called from PROJECT_FILE:129.
+[value] computing for function eprintf <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function eprintf
+[value] computing for function exit <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+PROJECT_FILE:115:[value] Function exit: postcondition got status invalid
+[value] Done for function exit
+[value] Recording results for e_acsl_fail
+[value] Done for function e_acsl_fail
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:130.
+PROJECT_FILE:130:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:130.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:131.
+PROJECT_FILE:131:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+PROJECT_FILE:134:[value] Assertion got status valid.
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:136.
+PROJECT_FILE:136:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:137.
+PROJECT_FILE:137:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:137.
+PROJECT_FILE:137:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_neg <-main.
+        Called from PROJECT_FILE:138.
+PROJECT_FILE:138:[value] Function mpz_neg: precondition got status valid
+[value] Done for function mpz_neg
+[value] computing for function mpz_cmp <-main.
+        Called from PROJECT_FILE:139.
+PROJECT_FILE:139:[value] Function mpz_cmp: precondition got status valid
+[value] Done for function mpz_cmp
+[value] computing for function e_acsl_fail <-main.
+        Called from PROJECT_FILE:140.
+[value] computing for function eprintf <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function eprintf
+[value] computing for function exit <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function exit
+[value] Recording results for e_acsl_fail
+[value] Done for function e_acsl_fail
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:141.
+PROJECT_FILE:141:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:141.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:142.
+PROJECT_FILE:142:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+PROJECT_FILE:145:[value] Assertion got status valid.
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:147.
+PROJECT_FILE:147:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:148.
+PROJECT_FILE:148:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:148.
+PROJECT_FILE:148:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_com <-main.
+        Called from PROJECT_FILE:149.
+[kernel] No code for function mpz_com, default assigns generated
+[value] Done for function mpz_com
+[value] computing for function mpz_cmp <-main.
+        Called from PROJECT_FILE:150.
+PROJECT_FILE:150:[value] Function mpz_cmp: precondition got status valid
+[value] Done for function mpz_cmp
+[value] computing for function e_acsl_fail <-main.
+        Called from PROJECT_FILE:151.
+[value] computing for function eprintf <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function eprintf
+[value] computing for function exit <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function exit
+[value] Recording results for e_acsl_fail
+[value] Done for function e_acsl_fail
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:152.
+PROJECT_FILE:152:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:152.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:153.
+PROJECT_FILE:153:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+PROJECT_FILE:156:[value] Assertion got status valid.
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:159.
+PROJECT_FILE:159:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:159.
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:160.
+PROJECT_FILE:160:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_add <-main.
+        Called from PROJECT_FILE:160.
+PROJECT_FILE:160:[value] Function mpz_add: precondition got status valid
+[value] Done for function mpz_add
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:161.
+PROJECT_FILE:161:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:161.
+PROJECT_FILE:161:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_neg <-main.
+        Called from PROJECT_FILE:162.
+PROJECT_FILE:162:[value] Function mpz_neg: precondition got status valid
+[value] Done for function mpz_neg
+[value] computing for function mpz_cmp <-main.
+        Called from PROJECT_FILE:163.
+PROJECT_FILE:163:[value] Function mpz_cmp: precondition got status valid
+[value] Done for function mpz_cmp
+[value] computing for function e_acsl_fail <-main.
+        Called from PROJECT_FILE:164.
+[value] computing for function eprintf <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function eprintf
+[value] computing for function exit <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function exit
+[value] Recording results for e_acsl_fail
+[value] Done for function e_acsl_fail
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:165.
+PROJECT_FILE:165:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:165.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:166.
+PROJECT_FILE:166:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:166.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:167.
+PROJECT_FILE:167:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+PROJECT_FILE:170:[value] Assertion got status valid.
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:173.
+PROJECT_FILE:173:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:173.
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:174.
+PROJECT_FILE:174:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_sub <-main.
+        Called from PROJECT_FILE:174.
+PROJECT_FILE:174:[value] Function mpz_sub: precondition got status valid
+[value] Done for function mpz_sub
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:175.
+PROJECT_FILE:175:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:175.
+PROJECT_FILE:175:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_neg <-main.
+        Called from PROJECT_FILE:176.
+PROJECT_FILE:176:[value] Function mpz_neg: precondition got status valid
+[value] Done for function mpz_neg
+[value] computing for function mpz_cmp <-main.
+        Called from PROJECT_FILE:177.
+PROJECT_FILE:177:[value] Function mpz_cmp: precondition got status valid
+[value] Done for function mpz_cmp
+[value] computing for function e_acsl_fail <-main.
+        Called from PROJECT_FILE:178.
+[value] computing for function eprintf <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function eprintf
+[value] computing for function exit <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function exit
+[value] Recording results for e_acsl_fail
+[value] Done for function e_acsl_fail
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:179.
+PROJECT_FILE:179:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:179.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:180.
+PROJECT_FILE:180:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:180.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:181.
+PROJECT_FILE:181:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+PROJECT_FILE:184:[value] Assertion got status valid.
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:187.
+PROJECT_FILE:187:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:187.
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:188.
+PROJECT_FILE:188:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_mul <-main.
+        Called from PROJECT_FILE:188.
+PROJECT_FILE:188:[value] Function mpz_mul: precondition got status valid
+[value] Done for function mpz_mul
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:189.
+PROJECT_FILE:189:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:189.
+PROJECT_FILE:189:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_neg <-main.
+        Called from PROJECT_FILE:190.
+PROJECT_FILE:190:[value] Function mpz_neg: precondition got status valid
+[value] Done for function mpz_neg
+[value] computing for function mpz_cmp <-main.
+        Called from PROJECT_FILE:191.
+PROJECT_FILE:191:[value] Function mpz_cmp: precondition got status valid
+[value] Done for function mpz_cmp
+[value] computing for function e_acsl_fail <-main.
+        Called from PROJECT_FILE:192.
+[value] computing for function eprintf <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function eprintf
+[value] computing for function exit <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function exit
+[value] Recording results for e_acsl_fail
+[value] Done for function e_acsl_fail
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:193.
+PROJECT_FILE:193:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:193.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:194.
+PROJECT_FILE:194:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:194.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:195.
+PROJECT_FILE:195:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+PROJECT_FILE:198:[value] Assertion got status valid.
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:201.
+PROJECT_FILE:201:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:201.
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:202.
+PROJECT_FILE:202:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_cdiv_q <-main.
+        Called from PROJECT_FILE:203.
+PROJECT_FILE:203:[value] Function mpz_cdiv_q: precondition got status valid
+[value] Done for function mpz_cdiv_q
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:204.
+PROJECT_FILE:204:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:204.
+PROJECT_FILE:204:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_neg <-main.
+        Called from PROJECT_FILE:205.
+PROJECT_FILE:205:[value] Function mpz_neg: precondition got status valid
+[value] Done for function mpz_neg
+[value] computing for function mpz_cmp <-main.
+        Called from PROJECT_FILE:206.
+PROJECT_FILE:206:[value] Function mpz_cmp: precondition got status valid
+[value] Done for function mpz_cmp
+[value] computing for function e_acsl_fail <-main.
+        Called from PROJECT_FILE:207.
+[value] computing for function eprintf <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function eprintf
+[value] computing for function exit <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function exit
+[value] Recording results for e_acsl_fail
+[value] Done for function e_acsl_fail
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:208.
+PROJECT_FILE:208:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:208.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:209.
+PROJECT_FILE:209:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:209.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:210.
+PROJECT_FILE:210:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+PROJECT_FILE:213:[value] Assertion got status valid.
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:216.
+PROJECT_FILE:216:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:216.
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:217.
+PROJECT_FILE:217:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_mod <-main.
+        Called from PROJECT_FILE:217.
+PROJECT_FILE:217:[value] Function mpz_mod: precondition got status valid
+[value] Done for function mpz_mod
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:218.
+PROJECT_FILE:218:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:218.
+PROJECT_FILE:218:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_neg <-main.
+        Called from PROJECT_FILE:219.
+PROJECT_FILE:219:[value] Function mpz_neg: precondition got status valid
+[value] Done for function mpz_neg
+[value] computing for function mpz_cmp <-main.
+        Called from PROJECT_FILE:220.
+PROJECT_FILE:220:[value] Function mpz_cmp: precondition got status valid
+[value] Done for function mpz_cmp
+[value] computing for function e_acsl_fail <-main.
+        Called from PROJECT_FILE:221.
+[value] computing for function eprintf <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function eprintf
+[value] computing for function exit <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function exit
+[value] Recording results for e_acsl_fail
+[value] Done for function e_acsl_fail
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:222.
+PROJECT_FILE:222:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:222.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:223.
+PROJECT_FILE:223:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:223.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:224.
+PROJECT_FILE:224:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+PROJECT_FILE:227:[value] Assertion got status valid.
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:233.
+PROJECT_FILE:233:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:234.
+PROJECT_FILE:234:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:234.
+PROJECT_FILE:234:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_mul <-main.
+        Called from PROJECT_FILE:235.
+PROJECT_FILE:235:[value] Function mpz_mul: precondition got status valid
+[value] Done for function mpz_mul
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:236.
+PROJECT_FILE:236:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:236.
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:237.
+PROJECT_FILE:237:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_add <-main.
+        Called from PROJECT_FILE:237.
+PROJECT_FILE:237:[value] Function mpz_add: precondition got status valid
+[value] Done for function mpz_add
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:238.
+PROJECT_FILE:238:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_add <-main.
+        Called from PROJECT_FILE:238.
+PROJECT_FILE:238:[value] Function mpz_add: precondition got status valid
+[value] Done for function mpz_add
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:239.
+PROJECT_FILE:239:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:239.
+PROJECT_FILE:239:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_sub <-main.
+        Called from PROJECT_FILE:240.
+PROJECT_FILE:240:[value] Function mpz_sub: precondition got status valid
+[value] Done for function mpz_sub
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:241.
+PROJECT_FILE:241:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:241.
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:242.
+PROJECT_FILE:242:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_sub <-main.
+        Called from PROJECT_FILE:243.
+PROJECT_FILE:243:[value] Function mpz_sub: precondition got status valid
+[value] Done for function mpz_sub
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:244.
+PROJECT_FILE:244:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_add <-main.
+        Called from PROJECT_FILE:245.
+PROJECT_FILE:245:[value] Function mpz_add: precondition got status valid
+[value] Done for function mpz_add
+[value] computing for function mpz_init_set_si <-main.
+        Called from PROJECT_FILE:246.
+PROJECT_FILE:246:[value] Function mpz_init_set_si: postcondition got status unknown
+[value] Done for function mpz_init_set_si
+[value] computing for function mpz_init <-main.
+        Called from PROJECT_FILE:246.
+PROJECT_FILE:246:[value] Function mpz_init: postcondition got status unknown
+[value] Done for function mpz_init
+[value] computing for function mpz_neg <-main.
+        Called from PROJECT_FILE:247.
+PROJECT_FILE:247:[value] Function mpz_neg: precondition got status valid
+[value] Done for function mpz_neg
+[value] computing for function mpz_cmp <-main.
+        Called from PROJECT_FILE:248.
+PROJECT_FILE:248:[value] Function mpz_cmp: precondition got status valid
+[value] Done for function mpz_cmp
+[value] computing for function e_acsl_fail <-main.
+        Called from PROJECT_FILE:250.
+[value] computing for function eprintf <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function eprintf
+[value] computing for function exit <-e_acsl_fail <-main.
+        Called from PROJECT_FILE:115.
+[value] Done for function exit
+[value] Recording results for e_acsl_fail
+[value] Done for function e_acsl_fail
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:251.
+PROJECT_FILE:251:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:251.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:252.
+PROJECT_FILE:252:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:252.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:253.
+PROJECT_FILE:253:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:253.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:254.
+PROJECT_FILE:254:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:254.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:255.
+PROJECT_FILE:255:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:255.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:256.
+PROJECT_FILE:256:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:256.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:257.
+PROJECT_FILE:257:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:257.
+[value] Done for function mpz_clear
+[value] computing for function mpz_clear <-main.
+        Called from PROJECT_FILE:258.
+PROJECT_FILE:258:[value] Function mpz_clear: precondition got status valid
+[value] Done for function mpz_clear
+[value] Recording results for main
+[value] done for function main
+[from] Computing for function mpz_init_set_si
+[from] Done for function mpz_init_set_si
+[from] Computing for function mpz_init
+[from] Done for function mpz_init
+[from] Computing for function mpz_neg
+[from] Done for function mpz_neg
+[from] Computing for function mpz_cmp
+[from] Done for function mpz_cmp
+[from] Computing for function e_acsl_fail
+[from] Computing for function eprintf <-e_acsl_fail
+[from] Done for function eprintf
+[from] Computing for function exit <-e_acsl_fail
+[from] Done for function exit
+PROJECT_FILE:115:[from] Non terminating function (no dependencies)
+[from] Done for function e_acsl_fail
+[from] Computing for function mpz_clear
+[from] Done for function mpz_clear
+[from] Computing for function mpz_com
+[from] Done for function mpz_com
+[from] Computing for function mpz_add
+[from] Done for function mpz_add
+[from] Computing for function mpz_sub
+[from] Done for function mpz_sub
+[from] Computing for function mpz_mul
+[from] Done for function mpz_mul
+[from] Computing for function mpz_cdiv_q
+[from] Done for function mpz_cdiv_q
+[from] Computing for function mpz_mod
+[from] Done for function mpz_mod
+[dominators] computing for function main
+[dominators] done for function main
+[value] ====== VALUES COMPUTED ======
+[value] Values for function e_acsl_fail:
+          NON TERMINATING FUNCTION
+[value] Values for function main:
+          x ∈ {-3; }
+          y ∈ {2; }
+/* Generated by Frama-C */
+struct __anonstruct___mpz_struct_1 {
+   int _mp_alloc ;
+   int _mp_size ;
+   unsigned long *_mp_d ;
+};
+typedef struct __anonstruct___mpz_struct_1 __mpz_struct;
+typedef __mpz_struct mpz_t[1];
+/*@ ensures \valid(\at(x,Old));
+    assigns *x;  */
+extern void mpz_init(__mpz_struct * /*[1]*/  x ) ;
+/*@ ensures \valid(\at(z,Old));
+    assigns *z;  */
+extern void mpz_init_set_si(__mpz_struct * /*[1]*/  z , long n ) ;
+/*@ requires \valid(x);
+    assigns *x;  */
+extern void mpz_clear(__mpz_struct * /*[1]*/  x ) ;
+/*@ requires \valid(z1);
+    requires \valid(z2);
+    assigns \nothing;  */
+extern int mpz_cmp(__mpz_struct * /*[1]*/  z1 , __mpz_struct * /*[1]*/  z2 ) ;
+/*@ requires \valid(z1);
+    requires \valid(z2);
+    assigns *z1;  */
+extern int mpz_neg(__mpz_struct * /*[1]*/  z1 , __mpz_struct * /*[1]*/  z2 ) ;
+/*@ requires \valid(z1);
+    requires \valid(z2);
+    requires \valid(z3);
+    assigns *z1; 
+*/
+extern int mpz_add(__mpz_struct * /*[1]*/  z1 , __mpz_struct * /*[1]*/  z2 ,
+                   __mpz_struct * /*[1]*/  z3 ) ;
+/*@ requires \valid(z1);
+    requires \valid(z2);
+    requires \valid(z3);
+    assigns *z1; 
+*/
+extern int mpz_sub(__mpz_struct * /*[1]*/  z1 , __mpz_struct * /*[1]*/  z2 ,
+                   __mpz_struct * /*[1]*/  z3 ) ;
+/*@ requires \valid(z1);
+    requires \valid(z2);
+    requires \valid(z3);
+    assigns *z1; 
+*/
+extern int mpz_mul(__mpz_struct * /*[1]*/  z1 , __mpz_struct * /*[1]*/  z2 ,
+                   __mpz_struct * /*[1]*/  z3 ) ;
+/*@ requires \valid(z1);
+    requires \valid(z2);
+    requires \valid(z3);
+    assigns *z1; 
+*/
+extern int mpz_cdiv_q(__mpz_struct * /*[1]*/  z1 ,
+                      __mpz_struct * /*[1]*/  z2 ,
+                      __mpz_struct * /*[1]*/  z3 ) ;
+/*@ requires \valid(z1);
+    requires \valid(z2);
+    requires \valid(z3);
+    assigns *z1; 
+*/
+extern int mpz_mod(__mpz_struct * /*[1]*/  z1 , __mpz_struct * /*[1]*/  z2 ,
+                   __mpz_struct * /*[1]*/  z3 ) ;
+/*@ terminates \false;
+    ensures \false;
+    assigns \nothing;  */
+extern void exit(int status ) ;
+/*@ assigns \nothing;  */
+extern void eprintf(char * ) ;
+void e_acsl_fail(char *msg ) 
+{
+  eprintf(msg);
+  exit(1);
+  return;
+}
+
+/*@ behavior generated:
+      assigns \at(\result,Post) \from \nothing;  */
+extern int ( /* missing proto */  mpz_com)() ;
+void main(void) 
+{
+  int x ;
+  int y ;
+  x = -3;
+  y = 2;
+  /*@ assert (-3 ≡ x); */ ;
+  { mpz_t e_acsl_cst_1 ; mpz_t e_acsl_cst_2 ; mpz_t e_acsl_cst_3 ;
+    int e_acsl_cst_4 ;
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_1),(long )3);
+    mpz_init((__mpz_struct *)(e_acsl_cst_2));
+    mpz_neg((__mpz_struct *)(e_acsl_cst_2),(__mpz_struct *)(e_acsl_cst_1));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_3),(long )x);
+    e_acsl_cst_4 = mpz_cmp((__mpz_struct *)(e_acsl_cst_2),
+                           (__mpz_struct *)(e_acsl_cst_3));
+    if (e_acsl_cst_4 != 0) { e_acsl_fail((char *)"((-3 == x))"); }
+    mpz_clear((__mpz_struct *)(e_acsl_cst_1));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_2));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_3));
+  }
+  
+  /*@ assert (x ≡ -3); */ ;
+  { mpz_t e_acsl_cst_5 ; mpz_t e_acsl_cst_6 ; mpz_t e_acsl_cst_7 ;
+    int e_acsl_cst_8 ;
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_5),(long )x);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_6),(long )3);
+    mpz_init((__mpz_struct *)(e_acsl_cst_7));
+    mpz_neg((__mpz_struct *)(e_acsl_cst_7),(__mpz_struct *)(e_acsl_cst_6));
+    e_acsl_cst_8 = mpz_cmp((__mpz_struct *)(e_acsl_cst_5),
+                           (__mpz_struct *)(e_acsl_cst_7));
+    if (e_acsl_cst_8 != 0) { e_acsl_fail((char *)"((x == -3))"); }
+    mpz_clear((__mpz_struct *)(e_acsl_cst_5));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_6));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_7));
+  }
+  
+  /*@ assert (0 ≢ ~0); */ ;
+  { mpz_t e_acsl_cst_9 ; mpz_t e_acsl_cst_10 ; mpz_t e_acsl_cst_11 ;
+    int e_acsl_cst_12 ;
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_9),(long )0);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_10),(long )0);
+    mpz_init((__mpz_struct *)(e_acsl_cst_11));
+    mpz_com(e_acsl_cst_11,e_acsl_cst_10);
+    e_acsl_cst_12 = mpz_cmp((__mpz_struct *)(e_acsl_cst_9),
+                            (__mpz_struct *)(e_acsl_cst_11));
+    if (e_acsl_cst_12 == 0) { e_acsl_fail((char *)"((0 != ~0))"); }
+    mpz_clear((__mpz_struct *)(e_acsl_cst_9));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_10));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_11));
+  }
+  
+  /*@ assert (x+1 ≡ -2); */ ;
+  { mpz_t e_acsl_cst_13 ; mpz_t e_acsl_cst_14 ; mpz_t e_acsl_cst_15 ;
+    mpz_t e_acsl_cst_16 ; mpz_t e_acsl_cst_17 ; int e_acsl_cst_18 ;
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_13),(long )x);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_14),(long )1);
+    mpz_init((__mpz_struct *)(e_acsl_cst_15));
+    mpz_add((__mpz_struct *)(e_acsl_cst_15),(__mpz_struct *)(e_acsl_cst_13),
+            (__mpz_struct *)(e_acsl_cst_14));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_16),(long )2);
+    mpz_init((__mpz_struct *)(e_acsl_cst_17));
+    mpz_neg((__mpz_struct *)(e_acsl_cst_17),(__mpz_struct *)(e_acsl_cst_16));
+    e_acsl_cst_18 = mpz_cmp((__mpz_struct *)(e_acsl_cst_15),
+                            (__mpz_struct *)(e_acsl_cst_17));
+    if (e_acsl_cst_18 != 0) { e_acsl_fail((char *)"((x+1 == -2))"); }
+    mpz_clear((__mpz_struct *)(e_acsl_cst_13));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_14));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_15));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_16));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_17));
+  }
+  
+  /*@ assert (x-1 ≡ -4); */ ;
+  { mpz_t e_acsl_cst_19 ; mpz_t e_acsl_cst_20 ; mpz_t e_acsl_cst_21 ;
+    mpz_t e_acsl_cst_22 ; mpz_t e_acsl_cst_23 ; int e_acsl_cst_24 ;
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_19),(long )x);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_20),(long )1);
+    mpz_init((__mpz_struct *)(e_acsl_cst_21));
+    mpz_sub((__mpz_struct *)(e_acsl_cst_21),(__mpz_struct *)(e_acsl_cst_19),
+            (__mpz_struct *)(e_acsl_cst_20));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_22),(long )4);
+    mpz_init((__mpz_struct *)(e_acsl_cst_23));
+    mpz_neg((__mpz_struct *)(e_acsl_cst_23),(__mpz_struct *)(e_acsl_cst_22));
+    e_acsl_cst_24 = mpz_cmp((__mpz_struct *)(e_acsl_cst_21),
+                            (__mpz_struct *)(e_acsl_cst_23));
+    if (e_acsl_cst_24 != 0) { e_acsl_fail((char *)"((x-1 == -4))"); }
+    mpz_clear((__mpz_struct *)(e_acsl_cst_19));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_20));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_21));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_22));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_23));
+  }
+  
+  /*@ assert (x*3 ≡ -9); */ ;
+  { mpz_t e_acsl_cst_25 ; mpz_t e_acsl_cst_26 ; mpz_t e_acsl_cst_27 ;
+    mpz_t e_acsl_cst_28 ; mpz_t e_acsl_cst_29 ; int e_acsl_cst_30 ;
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_25),(long )x);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_26),(long )3);
+    mpz_init((__mpz_struct *)(e_acsl_cst_27));
+    mpz_mul((__mpz_struct *)(e_acsl_cst_27),(__mpz_struct *)(e_acsl_cst_25),
+            (__mpz_struct *)(e_acsl_cst_26));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_28),(long )9);
+    mpz_init((__mpz_struct *)(e_acsl_cst_29));
+    mpz_neg((__mpz_struct *)(e_acsl_cst_29),(__mpz_struct *)(e_acsl_cst_28));
+    e_acsl_cst_30 = mpz_cmp((__mpz_struct *)(e_acsl_cst_27),
+                            (__mpz_struct *)(e_acsl_cst_29));
+    if (e_acsl_cst_30 != 0) { e_acsl_fail((char *)"((x*3 == -9))"); }
+    mpz_clear((__mpz_struct *)(e_acsl_cst_25));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_26));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_27));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_28));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_29));
+  }
+  
+  /*@ assert (x/3 ≡ -1); */ ;
+  { mpz_t e_acsl_cst_31 ; mpz_t e_acsl_cst_32 ; mpz_t e_acsl_cst_33 ;
+    mpz_t e_acsl_cst_34 ; mpz_t e_acsl_cst_35 ; int e_acsl_cst_36 ;
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_31),(long )x);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_32),(long )3);
+    mpz_init((__mpz_struct *)(e_acsl_cst_33));
+    mpz_cdiv_q((__mpz_struct *)(e_acsl_cst_33),
+               (__mpz_struct *)(e_acsl_cst_31),
+               (__mpz_struct *)(e_acsl_cst_32));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_34),(long )1);
+    mpz_init((__mpz_struct *)(e_acsl_cst_35));
+    mpz_neg((__mpz_struct *)(e_acsl_cst_35),(__mpz_struct *)(e_acsl_cst_34));
+    e_acsl_cst_36 = mpz_cmp((__mpz_struct *)(e_acsl_cst_33),
+                            (__mpz_struct *)(e_acsl_cst_35));
+    if (e_acsl_cst_36 != 0) { e_acsl_fail((char *)"((x/3 == -1))"); }
+    mpz_clear((__mpz_struct *)(e_acsl_cst_31));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_32));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_33));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_34));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_35));
+  }
+  
+  /*@ assert (x%2 ≡ -1); */ ;
+  { mpz_t e_acsl_cst_37 ; mpz_t e_acsl_cst_38 ; mpz_t e_acsl_cst_39 ;
+    mpz_t e_acsl_cst_40 ; mpz_t e_acsl_cst_41 ; int e_acsl_cst_42 ;
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_37),(long )x);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_38),(long )2);
+    mpz_init((__mpz_struct *)(e_acsl_cst_39));
+    mpz_mod((__mpz_struct *)(e_acsl_cst_39),(__mpz_struct *)(e_acsl_cst_37),
+            (__mpz_struct *)(e_acsl_cst_38));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_40),(long )1);
+    mpz_init((__mpz_struct *)(e_acsl_cst_41));
+    mpz_neg((__mpz_struct *)(e_acsl_cst_41),(__mpz_struct *)(e_acsl_cst_40));
+    e_acsl_cst_42 = mpz_cmp((__mpz_struct *)(e_acsl_cst_39),
+                            (__mpz_struct *)(e_acsl_cst_41));
+    if (e_acsl_cst_42 != 0) { e_acsl_fail((char *)"((x%2 == -1))"); }
+    mpz_clear((__mpz_struct *)(e_acsl_cst_37));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_38));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_39));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_40));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_41));
+  }
+  
+  /*@ assert (((x*2+(3+y))-4)+(x-y) ≡ -10); */ ;
+  { mpz_t e_acsl_cst_43 ; mpz_t e_acsl_cst_44 ; mpz_t e_acsl_cst_45 ;
+    mpz_t e_acsl_cst_46 ; mpz_t e_acsl_cst_47 ; mpz_t e_acsl_cst_48 ;
+    mpz_t e_acsl_cst_49 ; mpz_t e_acsl_cst_50 ; mpz_t e_acsl_cst_51 ;
+    mpz_t e_acsl_cst_52 ; mpz_t e_acsl_cst_53 ; mpz_t e_acsl_cst_54 ;
+    mpz_t e_acsl_cst_55 ; mpz_t e_acsl_cst_56 ; mpz_t e_acsl_cst_57 ;
+    int e_acsl_cst_58 ;
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_43),(long )x);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_44),(long )2);
+    mpz_init((__mpz_struct *)(e_acsl_cst_45));
+    mpz_mul((__mpz_struct *)(e_acsl_cst_45),(__mpz_struct *)(e_acsl_cst_43),
+            (__mpz_struct *)(e_acsl_cst_44));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_46),(long )3);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_47),(long )y);
+    mpz_init((__mpz_struct *)(e_acsl_cst_48));
+    mpz_add((__mpz_struct *)(e_acsl_cst_48),(__mpz_struct *)(e_acsl_cst_46),
+            (__mpz_struct *)(e_acsl_cst_47));
+    mpz_init((__mpz_struct *)(e_acsl_cst_49));
+    mpz_add((__mpz_struct *)(e_acsl_cst_49),(__mpz_struct *)(e_acsl_cst_45),
+            (__mpz_struct *)(e_acsl_cst_48));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_50),(long )4);
+    mpz_init((__mpz_struct *)(e_acsl_cst_51));
+    mpz_sub((__mpz_struct *)(e_acsl_cst_51),(__mpz_struct *)(e_acsl_cst_49),
+            (__mpz_struct *)(e_acsl_cst_50));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_52),(long )x);
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_53),(long )y);
+    mpz_init((__mpz_struct *)(e_acsl_cst_54));
+    mpz_sub((__mpz_struct *)(e_acsl_cst_54),(__mpz_struct *)(e_acsl_cst_52),
+            (__mpz_struct *)(e_acsl_cst_53));
+    mpz_init((__mpz_struct *)(e_acsl_cst_55));
+    mpz_add((__mpz_struct *)(e_acsl_cst_55),(__mpz_struct *)(e_acsl_cst_51),
+            (__mpz_struct *)(e_acsl_cst_54));
+    mpz_init_set_si((__mpz_struct *)(e_acsl_cst_56),(long )10);
+    mpz_init((__mpz_struct *)(e_acsl_cst_57));
+    mpz_neg((__mpz_struct *)(e_acsl_cst_57),(__mpz_struct *)(e_acsl_cst_56));
+    e_acsl_cst_58 = mpz_cmp((__mpz_struct *)(e_acsl_cst_55),
+                            (__mpz_struct *)(e_acsl_cst_57));
+    if (e_acsl_cst_58 != 0) {
+      e_acsl_fail((char *)"((((x*2+(3+y))-4)+(x-y) == -10))");
+    } mpz_clear((__mpz_struct *)(e_acsl_cst_43));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_44));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_45));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_46));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_47));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_48));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_49));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_50));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_51));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_52));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_53));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_54));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_55));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_56));
+    mpz_clear((__mpz_struct *)(e_acsl_cst_57));
+  }
+  
+  return;
+}
+
+
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/comparison.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/comparison.res.oracle
index 2d2ef36e82c14605bf8bc8ab4e9ee5b6ee7da2cc..65e7759f474f9152816eb3690546688c99d95714 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/comparison.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/comparison.res.oracle
@@ -2,298 +2,298 @@
 [value] Computing initial state
 [value] Initial state computed
 [value] Values of globals at initialization
-PROJECT_FILE:78:[value] Assertion got status valid.
+PROJECT_FILE:124:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:80.
-PROJECT_FILE:80:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:126.
+PROJECT_FILE:126:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:80.
+        Called from PROJECT_FILE:126.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:81.
-PROJECT_FILE:81:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:127.
+PROJECT_FILE:127:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:82.
+        Called from PROJECT_FILE:128.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
-PROJECT_FILE:69:[value] Function exit: postcondition got status invalid
+        Called from PROJECT_FILE:115.
+PROJECT_FILE:115:[value] Function exit: postcondition got status invalid
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:83.
-PROJECT_FILE:83:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:129.
+PROJECT_FILE:129:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:83.
+        Called from PROJECT_FILE:129.
 [value] Done for function mpz_clear
-PROJECT_FILE:86:[value] Assertion got status valid.
+PROJECT_FILE:132:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:88.
-PROJECT_FILE:88:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:134.
+PROJECT_FILE:134:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:88.
+        Called from PROJECT_FILE:134.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:89.
-PROJECT_FILE:89:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:135.
+PROJECT_FILE:135:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:90.
+        Called from PROJECT_FILE:136.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:91.
-PROJECT_FILE:91:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:137.
+PROJECT_FILE:137:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:91.
+        Called from PROJECT_FILE:137.
 [value] Done for function mpz_clear
-PROJECT_FILE:94:[value] Assertion got status valid.
+PROJECT_FILE:140:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:96.
-PROJECT_FILE:96:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:142.
+PROJECT_FILE:142:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:96.
+        Called from PROJECT_FILE:142.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:97.
-PROJECT_FILE:97:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:143.
+PROJECT_FILE:143:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:98.
+        Called from PROJECT_FILE:144.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:99.
-PROJECT_FILE:99:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:145.
+PROJECT_FILE:145:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:99.
+        Called from PROJECT_FILE:145.
 [value] Done for function mpz_clear
-PROJECT_FILE:102:[value] Assertion got status valid.
+PROJECT_FILE:148:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:104.
-PROJECT_FILE:104:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:150.
+PROJECT_FILE:150:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:104.
+        Called from PROJECT_FILE:150.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:105.
-PROJECT_FILE:105:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:151.
+PROJECT_FILE:151:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:106.
+        Called from PROJECT_FILE:152.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:107.
-PROJECT_FILE:107:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:153.
+PROJECT_FILE:153:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:107.
+        Called from PROJECT_FILE:153.
 [value] Done for function mpz_clear
-PROJECT_FILE:111:[value] Assertion got status valid.
-PROJECT_FILE:114:[value] Assertion got status valid.
-PROJECT_FILE:117:[value] Assertion got status valid.
+PROJECT_FILE:157:[value] Assertion got status valid.
+PROJECT_FILE:160:[value] Assertion got status valid.
+PROJECT_FILE:163:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:119.
-PROJECT_FILE:119:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:165.
+PROJECT_FILE:165:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:119.
+        Called from PROJECT_FILE:165.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:120.
-PROJECT_FILE:120:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:166.
+PROJECT_FILE:166:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:121.
+        Called from PROJECT_FILE:167.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:122.
-PROJECT_FILE:122:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:168.
+PROJECT_FILE:168:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:122.
+        Called from PROJECT_FILE:168.
 [value] Done for function mpz_clear
-PROJECT_FILE:125:[value] Assertion got status valid.
+PROJECT_FILE:171:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:127.
-PROJECT_FILE:127:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:173.
+PROJECT_FILE:173:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:127.
+        Called from PROJECT_FILE:173.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:128.
-PROJECT_FILE:128:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:174.
+PROJECT_FILE:174:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:129.
+        Called from PROJECT_FILE:175.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:130.
-PROJECT_FILE:130:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:176.
+PROJECT_FILE:176:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:130.
+        Called from PROJECT_FILE:176.
 [value] Done for function mpz_clear
-PROJECT_FILE:133:[value] Assertion got status valid.
+PROJECT_FILE:179:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:135.
-PROJECT_FILE:135:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:181.
+PROJECT_FILE:181:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:135.
+        Called from PROJECT_FILE:181.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:136.
-PROJECT_FILE:136:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:182.
+PROJECT_FILE:182:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:137.
+        Called from PROJECT_FILE:183.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:138.
-PROJECT_FILE:138:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:184.
+PROJECT_FILE:184:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:138.
+        Called from PROJECT_FILE:184.
 [value] Done for function mpz_clear
-PROJECT_FILE:141:[value] Assertion got status valid.
+PROJECT_FILE:187:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:143.
-PROJECT_FILE:143:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:189.
+PROJECT_FILE:189:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:143.
+        Called from PROJECT_FILE:189.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:144.
-PROJECT_FILE:144:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:190.
+PROJECT_FILE:190:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:145.
+        Called from PROJECT_FILE:191.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:146.
-PROJECT_FILE:146:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:192.
+PROJECT_FILE:192:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:146.
+        Called from PROJECT_FILE:192.
 [value] Done for function mpz_clear
-PROJECT_FILE:149:[value] Assertion got status valid.
+PROJECT_FILE:195:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:151.
-PROJECT_FILE:151:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:197.
+PROJECT_FILE:197:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:151.
+        Called from PROJECT_FILE:197.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:152.
-PROJECT_FILE:152:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:198.
+PROJECT_FILE:198:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:153.
+        Called from PROJECT_FILE:199.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:154.
-PROJECT_FILE:154:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:200.
+PROJECT_FILE:200:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:154.
+        Called from PROJECT_FILE:200.
 [value] Done for function mpz_clear
-PROJECT_FILE:157:[value] Assertion got status valid.
+PROJECT_FILE:203:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:159.
-PROJECT_FILE:159:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:205.
+PROJECT_FILE:205:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:159.
+        Called from PROJECT_FILE:205.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:160.
-PROJECT_FILE:160:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:206.
+PROJECT_FILE:206:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:161.
+        Called from PROJECT_FILE:207.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:162.
-PROJECT_FILE:162:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:208.
+PROJECT_FILE:208:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:162.
+        Called from PROJECT_FILE:208.
 [value] Done for function mpz_clear
 [value] Recording results for main
 [value] done for function main
@@ -306,7 +306,7 @@ PROJECT_FILE:162:[value] Function mpz_clear: precondition got status valid
 [from] Done for function eprintf
 [from] Computing for function exit <-e_acsl_fail
 [from] Done for function exit
-PROJECT_FILE:69:[from] Non terminating function (no dependencies)
+PROJECT_FILE:115:[from] Non terminating function (no dependencies)
 [from] Done for function e_acsl_fail
 [from] Computing for function mpz_clear
 [from] Done for function mpz_clear
@@ -327,12 +327,12 @@ struct __anonstruct___mpz_struct_1 {
 };
 typedef struct __anonstruct___mpz_struct_1 __mpz_struct;
 typedef __mpz_struct mpz_t[1];
-/*@ requires \valid(x);
-    assigns *x;  */
-extern void mpz_clear(__mpz_struct * /*[1]*/  x ) ;
 /*@ ensures \valid(\at(z,Old));
     assigns *z;  */
 extern void mpz_init_set_si(__mpz_struct * /*[1]*/  z , long n ) ;
+/*@ requires \valid(x);
+    assigns *x;  */
+extern void mpz_clear(__mpz_struct * /*[1]*/  x ) ;
 /*@ requires \valid(z1);
     requires \valid(z2);
     assigns \nothing;  */
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/integer_constant.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/integer_constant.res.oracle
index 9be9cc4733af9796cdc9829217d545e63c83b0e0..7b331b4436c58589d9a134f3b8982387375cd52a 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/integer_constant.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/integer_constant.res.oracle
@@ -2,94 +2,94 @@
 [value] Computing initial state
 [value] Initial state computed
 [value] Values of globals at initialization
-PROJECT_FILE:73:[value] Assertion got status valid.
+PROJECT_FILE:119:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:75.
-PROJECT_FILE:75:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:121.
+PROJECT_FILE:121:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:75.
+        Called from PROJECT_FILE:121.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:76.
-PROJECT_FILE:76:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:122.
+PROJECT_FILE:122:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:77.
+        Called from PROJECT_FILE:123.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
-PROJECT_FILE:69:[value] Function exit: postcondition got status invalid
+        Called from PROJECT_FILE:115.
+PROJECT_FILE:115:[value] Function exit: postcondition got status invalid
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:78.
-PROJECT_FILE:78:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:124.
+PROJECT_FILE:124:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:78.
+        Called from PROJECT_FILE:124.
 [value] Done for function mpz_clear
-PROJECT_FILE:81:[value] Assertion got status valid.
+PROJECT_FILE:127:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:83.
-PROJECT_FILE:83:[value] Function mpz_init_set_si: postcondition got status unknown
+        Called from PROJECT_FILE:129.
+PROJECT_FILE:129:[value] Function mpz_init_set_si: postcondition got status unknown
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <-main.
-        Called from PROJECT_FILE:83.
+        Called from PROJECT_FILE:129.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:84.
-PROJECT_FILE:84:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:130.
+PROJECT_FILE:130:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:85.
+        Called from PROJECT_FILE:131.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:86.
-PROJECT_FILE:86:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:132.
+PROJECT_FILE:132:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:86.
+        Called from PROJECT_FILE:132.
 [value] Done for function mpz_clear
-PROJECT_FILE:89:[value] Assertion got status valid.
+PROJECT_FILE:135:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_str <-main.
-        Called from PROJECT_FILE:91.
-PROJECT_FILE:91:[value] Function mpz_init_set_str: postcondition got status unknown
+        Called from PROJECT_FILE:137.
+PROJECT_FILE:137:[value] Function mpz_init_set_str: postcondition got status unknown
 [value] Done for function mpz_init_set_str
 [value] computing for function mpz_init_set_str <-main.
-        Called from PROJECT_FILE:92.
-PROJECT_FILE:92:[value] Function mpz_init_set_str: postcondition got status unknown
+        Called from PROJECT_FILE:138.
+PROJECT_FILE:138:[value] Function mpz_init_set_str: postcondition got status unknown
 [value] Done for function mpz_init_set_str
 [value] computing for function mpz_cmp <-main.
-        Called from PROJECT_FILE:93.
-PROJECT_FILE:93:[value] Function mpz_cmp: precondition got status valid
+        Called from PROJECT_FILE:139.
+PROJECT_FILE:139:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <-main.
-        Called from PROJECT_FILE:95.
+        Called from PROJECT_FILE:141.
 [value] computing for function eprintf <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function eprintf
 [value] computing for function exit <-e_acsl_fail <-main.
-        Called from PROJECT_FILE:69.
+        Called from PROJECT_FILE:115.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:96.
-PROJECT_FILE:96:[value] Function mpz_clear: precondition got status valid
+        Called from PROJECT_FILE:142.
+PROJECT_FILE:142:[value] Function mpz_clear: precondition got status valid
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <-main.
-        Called from PROJECT_FILE:96.
+        Called from PROJECT_FILE:142.
 [value] Done for function mpz_clear
 [value] Recording results for main
 [value] done for function main
@@ -102,7 +102,7 @@ PROJECT_FILE:96:[value] Function mpz_clear: precondition got status valid
 [from] Done for function eprintf
 [from] Computing for function exit <-e_acsl_fail
 [from] Done for function exit
-PROJECT_FILE:69:[from] Non terminating function (no dependencies)
+PROJECT_FILE:115:[from] Non terminating function (no dependencies)
 [from] Done for function e_acsl_fail
 [from] Computing for function mpz_clear
 [from] Done for function mpz_clear
@@ -122,9 +122,6 @@ struct __anonstruct___mpz_struct_1 {
 };
 typedef struct __anonstruct___mpz_struct_1 __mpz_struct;
 typedef __mpz_struct mpz_t[1];
-/*@ requires \valid(x);
-    assigns *x;  */
-extern void mpz_clear(__mpz_struct * /*[1]*/  x ) ;
 /*@ ensures \valid(\at(z,Old));
     assigns *z;  */
 extern void mpz_init_set_si(__mpz_struct * /*[1]*/  z , long n ) ;
@@ -132,6 +129,9 @@ extern void mpz_init_set_si(__mpz_struct * /*[1]*/  z , long n ) ;
     assigns *z;  */
 extern void mpz_init_set_str(__mpz_struct * /*[1]*/  z , char *str ,
                              int base ) ;
+/*@ requires \valid(x);
+    assigns *x;  */
+extern void mpz_clear(__mpz_struct * /*[1]*/  x ) ;
 /*@ requires \valid(z1);
     requires \valid(z2);
     assigns \nothing;  */
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/not.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/not.res.oracle
index f4443a2fb6496db7796ac52e0a2f7325aa7b7a04..9e043b60b5c43c027eec05e44f737ed09f09e34c 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/not.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/not.res.oracle
@@ -2,7 +2,7 @@
 [value] Computing initial state
 [value] Initial state computed
 [value] Values of globals at initialization
-PROJECT_FILE:75:[value] Assertion got status valid.
+PROJECT_FILE:121:[value] Assertion got status valid.
 [value] Recording results for main
 [value] done for function main
 [dominators] computing for function main
@@ -29,10 +29,10 @@ void main(void)
   int x ;
   x = 0;
   /*@ assert (x ≡ 0); */ ;
-  if ((long )x != 0L) { e_acsl_fail((char *)"((x == 0))"); }
+  if (x != 0) { e_acsl_fail((char *)"((x == 0))"); }
   if (x) {
     /*@ assert (x ≢ 0); */ ;
-    if ((long )x == 0L) { e_acsl_fail((char *)"((x != 0))"); }
+    if (x == 0) { e_acsl_fail((char *)"((x != 0))"); }
   }
   return;
 }
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/sizeof.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/sizeof.res.oracle
index 682d6aca84d3478901c3008451fc904ded2e8825..c3a7282e5f759530aa0d110c21be154f1e7c2209 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/sizeof.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/sizeof.res.oracle
@@ -2,8 +2,8 @@
 [value] Computing initial state
 [value] Initial state computed
 [value] Values of globals at initialization
-PROJECT_FILE:75:[value] Assertion got status valid.
-PROJECT_FILE:78:[value] Assertion got status valid.
+PROJECT_FILE:121:[value] Assertion got status valid.
+PROJECT_FILE:124:[value] Assertion got status valid.
 [value] Recording results for main
 [value] done for function main
 [dominators] computing for function main
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/string_literal.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/string_literal.res.oracle
index f0fe2baaa6f816aead3f5c113eed3411dd945009..52f8aa2955b5579a727f30002f65b45e88ecc5cc 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/string_literal.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/string_literal.res.oracle
@@ -2,7 +2,7 @@
 [value] Computing initial state
 [value] Initial state computed
 [value] Values of globals at initialization
-PROJECT_FILE:73:[value] Assertion got status valid.
+PROJECT_FILE:119:[value] Assertion got status valid.
 [value] Recording results for main
 [value] done for function main
 [dominators] computing for function main
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/true.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/true.res.oracle
index 1e01748f690a73760618a97879de4435aad48f8f..a5a7703d2f488a0a9d11adcf58309831e3839441 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/true.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/true.res.oracle
@@ -2,7 +2,7 @@
 [value] Computing initial state
 [value] Initial state computed
 [value] Values of globals at initialization
-PROJECT_FILE:75:[value] Assertion got status valid.
+PROJECT_FILE:121:[value] Assertion got status valid.
 [value] Recording results for main
 [value] done for function main
 [dominators] computing for function main
diff --git a/src/plugins/e-acsl/visit.ml b/src/plugins/e-acsl/visit.ml
index 306492bd15eb30268f75cad3cf2779d0e715aba8..ab246dd079b16b2f8b20c8614dfc131c00363ea8 100644
--- a/src/plugins/e-acsl/visit.ml
+++ b/src/plugins/e-acsl/visit.ml
@@ -68,9 +68,10 @@ module Mpz : sig
   val t: typ (* type "mpz_t" *)
   val is_now_referenced: unit -> unit (* one variable "mpz_t" now exists *)
   val is_t: typ -> bool (* is the type equal to "mpz_t"? *)
-  val init: varinfo -> stmt (* build stmt "mpz_init(v)" *)
-  val clear: varinfo -> stmt (* build stmt "mpz_clear(v)" *)
-  val init_set: varinfo -> exp -> stmt
+  val e_got_t: exp -> bool (* is the type of e is equal to "mpz_t"? *)
+  val init: exp -> stmt (* build stmt "mpz_init(v)" *)
+  val clear: exp -> stmt (* build stmt "mpz_clear(v)" *)
+  val init_set: exp -> exp -> stmt
 (* build stmt "mpz_init_set_*(v, e)" with the good function 'set' according to
    the type of e *)
 end = struct
@@ -85,8 +86,9 @@ end = struct
 
   let t = TNamed(t_torig, [])
   let is_t ty = Cil_datatype.Typ.equal ty t
+  let e_got_t e = is_t (typeOf e)
 
-  let apply_on_var funname v = mk_call ("mpz_" ^ funname) [ new_lval v ]
+  let apply_on_var funname e = mk_call ("mpz_" ^ funname) [ e ]
   let init = apply_on_var "init"
   let clear = apply_on_var "clear"
 
@@ -102,7 +104,7 @@ end = struct
 	[ e; integer ~loc:unknown_loc 10 ]
       | _ -> assert false
     in
-    mk_call ("mpz_init_set_" ^ fname) (new_lval v :: args)
+    mk_call ("mpz_init_set_" ^ fname) (v :: args)
 
 end
 
@@ -111,8 +113,9 @@ end
 (* ************************************************************************** *)
 
 module New_vars: sig
-  val push: typ -> (varinfo -> stmt list) -> varinfo
-  val finalize: unit -> (varinfo * stmt list * bool) list
+  val push: typ -> (varinfo -> exp (* the var as exp *) -> stmt) -> exp
+  val push_and_mpz_init: (varinfo -> exp (* the var as exp *) -> stmt) -> exp
+  val finalize: unit -> (varinfo * exp * stmt list * bool) list
 end = struct
 
   (* the finalizer resets the counter in order to keep it small. However, Cil
@@ -125,7 +128,7 @@ end = struct
   let var_cpt = ref 0
   let vlist = ref []
 
-  let push ty mk_stmts =
+  let push_list ty mk_stmts =
     incr var_cpt;
     let is_t = Mpz.is_t ty in
     if is_t then Mpz.is_now_referenced ();
@@ -138,8 +141,14 @@ end = struct
 	("e_acsl_cst_" ^ string_of_int !var_cpt)
 	ty
     in
-    vlist := (v, mk_stmts v, is_t) :: !vlist;
-    v
+    let e = new_lval v in
+    vlist := (v, e, mk_stmts v e, is_t) :: !vlist;
+    e
+
+  let push ty mk_stmt = push_list ty (fun v e -> [ mk_stmt v e ])
+
+  let push_and_mpz_init mk_stmt =
+    push_list Mpz.t (fun v e -> [ Mpz.init e; mk_stmt v e ])
 
   let finalize () =
     var_cpt := 0;
@@ -180,9 +189,9 @@ let constant_to_exp = function
   | CInt64(n, k, s) ->
     (match k with
     | IBool | IChar | IUChar | IUInt | IUShort | IULong ->
-      kinteger64_repr ~loc:unknown_loc IULong n s
+      kinteger64_repr ~loc:unknown_loc k n s
     | ISChar | IShort | IInt | ILong ->
-      kinteger64_repr ~loc:unknown_loc ILong n s
+      kinteger64_repr ~loc:unknown_loc k n s
     | ILongLong | IULongLong ->
       mkString ~loc:unknown_loc (Int64.to_string n))
   | CStr _ as c -> new_exp unknown_loc (Const c)
@@ -195,13 +204,28 @@ let tlval_to_lval = function
   | TVar { lv_origin = Some v }, TNoOffset -> Var v, NoOffset
   | _ -> not_yet "complex left value"
 
+let relation_to_revbinop = function
+  | Rlt -> Ge
+  | Rgt -> Le
+  | Rle -> Gt
+  | Rge -> Lt
+  | Req -> Ne
+  | Rneq -> Eq
+
+let name_of_mpz_arith_bop = function
+  | PlusA -> "mpz_add"
+  | MinusA -> "mpz_sub"
+  | Mult -> "mpz_mul"
+  | Div -> "mpz_cdiv_q"
+  | Mod -> "mpz_mod"
+  | Lt | Gt | Le | Ge | Eq | Ne | BAnd | BXor | BOr | LAnd | LOr
+  | Shiftlt | Shiftrt | PlusPI | IndexPI | MinusPI | MinusPP -> assert false
+
 let wrap_leaf e = function
   | Ctype _ -> e
   | Ltype _ -> not_yet "term from an user defined type"
   | Lvar _ -> not_yet "polymorphic term"
-  | Linteger ->
-    let v = New_vars.push Mpz.t (fun v -> [ Mpz.init_set v e ]) in
-    new_lval v
+  | Linteger -> New_vars.push Mpz.t (fun _ v -> Mpz.init_set v e)
   | Lreal -> not_yet "real number"
   | Larrow _ -> not_yet "logic function"
 
@@ -218,8 +242,45 @@ let rec term_to_exp t = match t.term_node with
   | TAlignOfE t ->
     let e = term_to_exp t in
     new_exp ~loc:unknown_loc (AlignOfE e)
-  | TUnOp _ -> not_yet "unary operator"
-  | TBinOp _ -> not_yet "binary operator"
+  | TUnOp(Neg | BNot as op, t) ->
+    let e = term_to_exp t in
+    assert (Mpz.e_got_t e);
+    let name = match op with
+      | Neg -> "mpz_neg"
+      | BNot -> "mpz_com"
+      | LNot -> assert false
+    in
+    New_vars.push_and_mpz_init (fun _ ev -> mk_call name [ ev; e ])
+  | TUnOp(LNot, t) ->
+    let e = term_to_exp t in
+    let ty = typeOf e in
+    assert (not (Mpz.is_t ty));
+    new_exp ~loc:unknown_loc (UnOp(LNot, e, ty))
+  | TBinOp(PlusA | MinusA | Mult | Div | Mod as bop, t1, t2) ->
+    (* arithmetic binary operator *)
+    let e1 = term_to_exp t1 in
+    let e2 = term_to_exp t2 in
+    assert (Cil_datatype.Typ.equal (typeOf e1) (typeOf e2));
+    let name = name_of_mpz_arith_bop bop in
+    New_vars.push_and_mpz_init (fun _ e -> mk_call name [ e; e1; e2 ])
+  | TBinOp(Lt | Gt | Le | Ge | Eq | Ne as bop, t1, t2) ->
+    (* comparison operators *)
+    (* [TODO] don't work; see code comment in arith.i *)
+    comparison_to_exp bop t1 t2
+  | TBinOp((LOr | LAnd | BOr | BXor | BAnd), _, _) ->
+    (* left/right shift *)
+    not_yet "missing binary operator"
+  | TBinOp((Shiftlt | Shiftrt), _, _) ->
+    (* left/right shift *)
+    not_yet "left/right shift"
+  | TBinOp(PlusPI | IndexPI | MinusPI | MinusPP as bop, t1, t2) ->
+    (* binary operation over pointers *)
+    (* [TODO] untested *)
+    let e1 = term_to_exp t1 in
+    let e2 = term_to_exp t2 in
+    (* the type of the result is the same than type of the pointer [e1],
+       whatever is [e2] *)
+    new_exp ~loc:unknown_loc (BinOp(bop, e1, e2, typeOf e1))
   | TCastE(ty, t) ->
     let e = term_to_exp t in
     mkCast e ty
@@ -246,13 +307,20 @@ let rec term_to_exp t = match t.term_node with
   | Trange _ -> not_yet "range"
   | Tlet _ -> not_yet "let binding"
 
-let relation_to_revbinop = function
-  | Rlt -> Ge
-  | Rgt -> Le
-  | Rle -> Gt
-  | Rge -> Lt
-  | Req -> Ne
-  | Rneq -> Eq
+and comparison_to_exp bop t1 t2 =
+  let e1 = term_to_exp t1 in
+  let e2 = term_to_exp t2 in
+(*  Options.feedback "ty1=%a; ty2=%a" d_type (typeOf e1) d_type (typeOf e2);*)
+  assert (Cil_datatype.Typ.equal (typeOf e1) (typeOf e2));
+  if Mpz.e_got_t e1 then
+    let e =
+      New_vars.push
+	intType
+	(fun v _ -> mk_call ~result:(var v) "mpz_cmp" [ e1; e2 ])
+    in
+    new_exp unknown_loc (BinOp(bop, e, zero unknown_loc, intType))
+  else
+    new_exp unknown_loc (BinOp(bop, e1, e2, intType))
 
 (* convert an ACSL named predicate into the opposite C expression (if any).
    E.g. \true is converted into 0. *)
@@ -261,28 +329,7 @@ let rec named_predicate_to_revexp p = match p.content with
   | Ptrue -> zero ~loc:unknown_loc
   | Papp _ -> not_yet "logic function application"
   | Pseparated _ -> not_yet "separated"
-  | Prel(rel, t1, t2) ->
-    let bop = relation_to_revbinop rel in
-    let e1 = term_to_exp t1 in
-    let e2 = term_to_exp t2 in
-    if Mpz.is_t (typeOf e1) then begin
-      assert (Mpz.is_t (typeOf e2));
-      let v =
-	New_vars.push
-	  intType
-	  (fun v ->
-	    let result = var v in
-	    [ mk_call ~result "mpz_cmp" [ e1; e2 ] ])
-      in
-      let bop =
-	BinOp(bop,
-	      new_exp unknown_loc (Lval (var v)),
-	      zero unknown_loc,
-	      intType)
-      in
-      new_exp unknown_loc bop
-    end else
-      new_exp unknown_loc (BinOp(bop, e1, e2, intType))
+  | Prel(rel, t1, t2) -> comparison_to_exp (relation_to_revbinop rel) t1 t2
   | Pand _ -> not_yet "&&"
   | Por _ -> not_yet "||"
   | Pxor _ -> not_yet "xor"
@@ -374,10 +421,10 @@ class e_acsl_visitor prj generate = object
 	let b = New_block.finalize stmt in
 	let vars, clears =
 	  List.fold_left
-	    (fun (vars, clears) (v, stmts, must_clear) ->
+	    (fun (vars, clears) (v, e, stmts, must_clear) ->
 	      b.blocals <- v :: b.blocals;
 	      b.bstmts <- stmts @ b.bstmts;
-	      v :: vars, if must_clear then Mpz.clear v :: clears else clears)
+	      v :: vars, if must_clear then Mpz.clear e :: clears else clears)
 	    ([], [])
 	    new_vars
 	in