diff --git a/src/plugins/e-acsl/src/code_generator/assigns.ml b/src/plugins/e-acsl/src/code_generator/assigns.ml
index 71a54f001ca44869fd1caeab286aab509ba48656..1febf4acf418151ba282d9fcca47fd37164559df 100644
--- a/src/plugins/e-acsl/src/code_generator/assigns.ml
+++ b/src/plugins/e-acsl/src/code_generator/assigns.ml
@@ -84,9 +84,5 @@ let rec get_assigns_from ~loc env lprofile lv =
    expression [( *__retres_arg )[0]]. For a struct argument, this function just
    generates the variable corresponding to the argument. *)
 let get_assigned_var ~loc ~is_gmp vi =
-  let var =
-    if is_gmp
-    then Smart_exp.mem ~loc vi
-    else Smart_exp.lval ~loc (Cil.var vi)
-  in
-  Logic_utils.expr_to_term var
+  let var = if is_gmp then Smart_exp.mem ~loc vi else Cil.evar ~loc vi
+  in Logic_utils.expr_to_term var
diff --git a/src/plugins/e-acsl/src/code_generator/smart_exp.ml b/src/plugins/e-acsl/src/code_generator/smart_exp.ml
index 9ac13a267b9595df53524f073be70673ba10a938..3475ed66929c0271d5731943f98c76f4a6b338a5 100644
--- a/src/plugins/e-acsl/src/code_generator/smart_exp.ml
+++ b/src/plugins/e-acsl/src/code_generator/smart_exp.ml
@@ -72,10 +72,9 @@ let null ~loc =
   Cil.mkCast ~newt:(TPtr (TVoid [], [])) (Cil.zero ~loc)
 
 let mem ~loc vi =
-  lval ~loc
-    (Cil.mkMem
-       ~addr:(lval ~loc (Var vi, NoOffset))
-       ~off:(Index (Cil.zero ~loc, NoOffset)))
+  lval
+    ~loc
+    (Cil.mkMem ~addr:(Cil.evar ~loc vi) ~off:(Index (Cil.zero ~loc, NoOffset)))
 
 (*
 Local Variables:
diff --git a/src/plugins/e-acsl/src/code_generator/smart_exp.mli b/src/plugins/e-acsl/src/code_generator/smart_exp.mli
index d57e74be62926ecc2fea02ff0d30812b583042bc..b2a5e5b03f29073062d98a708adebc7a1548e7a1 100644
--- a/src/plugins/e-acsl/src/code_generator/smart_exp.mli
+++ b/src/plugins/e-acsl/src/code_generator/smart_exp.mli
@@ -47,7 +47,8 @@ val null: loc:location -> exp
 (** [null ~loc] creates an expression to represent the NULL pointer. *)
 
 val mem: loc:location -> varinfo -> exp
-
+(** [mem ~loc v] creates an expression to represent the array access to the
+    first location of v *)
 (*
 Local Variables:
 compile-command: "make -C ../../../../.."
diff --git a/src/plugins/e-acsl/tests/arith/functions.c b/src/plugins/e-acsl/tests/arith/functions.c
index 9c327c0e1b947af332f5725b589bdb1c8b45cfdd..ead203551b4cf464f28044f412691cf8f18bae15 100644
--- a/src/plugins/e-acsl/tests/arith/functions.c
+++ b/src/plugins/e-acsl/tests/arith/functions.c
@@ -80,7 +80,7 @@ int main(void) {
 
   /*@ assert f_sum (100) == 100; */;
 
-  /*@ assert over(1., 2.) == 1./2.; */;
+  /*@ assert over(1., 2.) == 0.5; */;
 
   // not yet supported
   /* /\*@ assert p_notyet(27); *\/ ; */
diff --git a/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c b/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c
index 8699808b755da65ff31130e928f3a703b1a85726..ca9e702ccf90ad1eae903661f7a1d6954148d184 100644
--- a/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c
+++ b/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c
@@ -411,28 +411,20 @@ int main(void)
   {
     __e_acsl_mpq_t __gen_e_acsl_over_2;
     __e_acsl_mpq_t __gen_e_acsl__11;
-    __e_acsl_mpq_t __gen_e_acsl__12;
-    __e_acsl_mpq_t __gen_e_acsl_div_3;
     int __gen_e_acsl_eq_2;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data_15 =
       {.values = (void *)0};
     __gen_e_acsl_over(& __gen_e_acsl_over_2,1.,2.);
     __gmpq_init(__gen_e_acsl__11);
-    __gmpq_set_d(__gen_e_acsl__11,1.);
-    __gmpq_init(__gen_e_acsl__12);
-    __gmpq_set_d(__gen_e_acsl__12,2.);
-    __gmpq_init(__gen_e_acsl_div_3);
-    __gmpq_div(__gen_e_acsl_div_3,
-               (__e_acsl_mpq_struct const *)(__gen_e_acsl__11),
-               (__e_acsl_mpq_struct const *)(__gen_e_acsl__12));
+    __gmpq_set_d(__gen_e_acsl__11,0.5);
     __gen_e_acsl_eq_2 = __gmpq_cmp((__e_acsl_mpq_struct const *)(__gen_e_acsl_over_2),
-                                   (__e_acsl_mpq_struct const *)(__gen_e_acsl_div_3));
+                                   (__e_acsl_mpq_struct const *)(__gen_e_acsl__11));
     __e_acsl_assert_register_mpq(& __gen_e_acsl_assert_data_15,
                                  "over(1., 2.)",
                                  (__e_acsl_mpq_struct const *)(__gen_e_acsl_over_2));
     __gen_e_acsl_assert_data_15.blocking = 1;
     __gen_e_acsl_assert_data_15.kind = "Assertion";
-    __gen_e_acsl_assert_data_15.pred_txt = "over(1., 2.) == 1. / 2.";
+    __gen_e_acsl_assert_data_15.pred_txt = "over(1., 2.) == 0.5";
     __gen_e_acsl_assert_data_15.file = "functions.c";
     __gen_e_acsl_assert_data_15.fct = "main";
     __gen_e_acsl_assert_data_15.line = 83;
@@ -440,10 +432,8 @@ int main(void)
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_15);
     __gmpq_clear(__gen_e_acsl_over_2);
     __gmpq_clear(__gen_e_acsl__11);
-    __gmpq_clear(__gen_e_acsl__12);
-    __gmpq_clear(__gen_e_acsl_div_3);
   }
-  /*@ assert over(1., 2.) == 1. / 2.; */ ;
+  /*@ assert over(1., 2.) == 0.5; */ ;
   __retres = 0;
   __e_acsl_memory_clean();
   return __retres;