diff --git a/src/plugins/e-acsl/src/analyses/typing.ml b/src/plugins/e-acsl/src/analyses/typing.ml
index e1e24001f371146b30863ea87f39a310e5195466..e4d122b5ed6edfa76a841a1ba886f1ff99c3a3f0 100644
--- a/src/plugins/e-acsl/src/analyses/typing.ml
+++ b/src/plugins/e-acsl/src/analyses/typing.ml
@@ -194,11 +194,11 @@ module Id_term_with_lenv =
    info is already computed for a term, it is never recomputed *)
 module Memo: sig
   val memo:
-    ?lenv:Function_params_ty.t ->
+    lenv:Function_params_ty.t ->
     (term -> computed_info) ->
     term ->
     computed_info Error.or_error
-  val get: ?lenv:Function_params_ty.t -> term ->
+  val get: lenv:Function_params_ty.t -> term ->
     computed_info Error.or_error
   val clear: unit -> unit
 end = struct
@@ -241,7 +241,7 @@ end = struct
     try Misc.Id_term.Hashtbl.find tbl t
     with Not_found -> Error.not_memoized ()
 
-  let get ?(lenv=[]) t =
+  let get ~lenv t =
     match lenv with
     | [] -> get_nondep t
     | _::_ -> get_dep lenv t
@@ -267,7 +267,7 @@ end = struct
       Id_term_with_lenv.Hashtbl.add dep_tbl (t, lenv) x;
       x
 
-  let memo ?(lenv=[]) f t =
+  let memo ~lenv f t =
     match lenv with
     | [] -> memo_nondep f t
     | _::_ -> memo_dep f t lenv
@@ -390,7 +390,7 @@ let rec type_term
     ?(under_lambda=false)
     ?(arith_operand=false)
     ?ctx
-    ?(lenv=[])
+    ~lenv
     t =
   let ctx = Option.map (mk_ctx ~use_gmp_opt) ctx in
   let dup ty = ty, ty in
@@ -667,7 +667,7 @@ let rec type_term
       ignore (type_term ~use_gmp_opt:true ~lenv li_t);
       dup (type_term ~use_gmp_opt:true ?ctx ~lenv t).ty
     | Tlambda ([ _ ],lt) ->
-      dup (type_term ~use_gmp_opt:true ~under_lambda:true ?ctx lt).ty;
+      dup (type_term ~use_gmp_opt:true ~under_lambda:true ?ctx ~lenv lt).ty;
     | Tlambda (_,_) -> Error.not_yet "lambda"
     | TDataCons (_,_) -> Error.not_yet "datacons"
     | TUpdate (_,_,_) -> Error.not_yet "update"
@@ -810,7 +810,7 @@ and type_bound_variables ~loc ~lenv (t1, lv, t2) =
   Interval.Env.add lv i;
   (t1, lv, t2)
 
-and type_predicate ?(lenv=[]) p =
+and type_predicate ~lenv p =
   match Logic_normalizer.get_pred p with
   | PoT_term t -> type_term ~use_gmp_opt:true ~lenv t
   | PoT_pred p ->
@@ -893,7 +893,9 @@ and type_predicate ?(lenv=[]) p =
         end
       | Pseparated tlist ->
         List.iter
-          (fun t -> ignore (type_term ~use_gmp_opt:false ~ctx:Nan t))
+          (fun t ->
+             ignore
+               (type_term ~use_gmp_opt:false ~ctx:Nan ~lenv t))
           tlist;
         c_int
       | Pinitialized(_, t)
@@ -903,14 +905,14 @@ and type_predicate ?(lenv=[]) p =
       | Pvalid_read(_, t)
       | Pobject_pointer(_,t)
       | Pvalid_function t ->
-        ignore (type_term ~use_gmp_opt:false ~ctx:Nan t);
+        ignore (type_term ~use_gmp_opt:false ~ctx:Nan ~lenv t);
         c_int
       | Pat(p, _) -> (type_predicate ~lenv p).ty
       | Pfresh _ -> Error.not_yet "\\fresh"
     in
     coerce ~arith_operand:false ~ctx:c_int ~op c_int
 
-let type_term ~use_gmp_opt ?ctx ?(lenv=[]) t =
+let type_term ~use_gmp_opt ?ctx ~lenv t =
   Options.feedback ~dkey ~level:4 "typing term '%a' in ctx '%a'."
     Printer.pp_term t (Pretty_utils.pp_opt D.pretty) ctx;
   ignore (type_term ~use_gmp_opt ?ctx ~lenv t);
@@ -918,7 +920,7 @@ let type_term ~use_gmp_opt ?ctx ?(lenv=[]) t =
     Stack.pop pending_typing ()
   done
 
-let type_named_predicate ?(lenv=[]) p =
+let type_named_predicate ~lenv p =
   Options.feedback ~dkey ~level:3 "typing predicate '%a'."
     Printer.pp_predicate p;
   ignore (type_predicate ~lenv p);
@@ -926,7 +928,7 @@ let type_named_predicate ?(lenv=[]) p =
     Stack.pop pending_typing ()
   done
 
-let unsafe_set t ?ctx ?(lenv=[]) ty =
+let unsafe_set t ?ctx ~lenv ty =
   let ctx = match ctx with None -> ty | Some ctx -> ctx in
   let mk _ = coerce ~arith_operand:false ~ctx ~op:ty ty in
   ignore (Memo.memo mk ~lenv t)
diff --git a/src/plugins/e-acsl/src/analyses/typing.mli b/src/plugins/e-acsl/src/analyses/typing.mli
index 84e1a12d2af7c05a614cc195796062a277a721ae..ae329a3cab1d2cf3a2b28ff463ec4fcf2d1ac327 100644
--- a/src/plugins/e-acsl/src/analyses/typing.mli
+++ b/src/plugins/e-acsl/src/analyses/typing.mli
@@ -100,14 +100,14 @@ val join: number_ty -> number_ty -> number_ty
 val type_term:
   use_gmp_opt:bool ->
   ?ctx:number_ty ->
-  ?lenv:Function_params_ty.t ->
+  lenv:Function_params_ty.t ->
   term ->
   unit
 (** Compute the type of each subterm of the given term in the given context. If
     [use_gmp_opt] is false, then the conversion to the given context is done
     even if -e-acsl-gmp-only is set. *)
 
-val type_named_predicate: ?lenv:Function_params_ty.t -> predicate -> unit
+val type_named_predicate: lenv:Function_params_ty.t -> predicate -> unit
 (** Compute the type of each term of the given predicate. *)
 
 val clear: unit -> unit
@@ -147,7 +147,7 @@ val get_cast_of_predicate: lenv:Function_params_ty.t -> predicate -> typ option
 val unsafe_set:
   term ->
   ?ctx:number_ty ->
-  ?lenv:Function_params_ty.t ->
+  lenv:Function_params_ty.t ->
   number_ty ->
   unit
 (** Register that the given term has the given type in the given context (if
diff --git a/src/plugins/e-acsl/src/code_generator/at_with_lscope.ml b/src/plugins/e-acsl/src/code_generator/at_with_lscope.ml
index 43b11a26c740468c066a20f84d964948a20eef61..0171aa913acdba223661987866a201707e8bd486 100644
--- a/src/plugins/e-acsl/src/code_generator/at_with_lscope.ml
+++ b/src/plugins/e-acsl/src/code_generator/at_with_lscope.ml
@@ -171,7 +171,11 @@ let size_from_sizes_and_shifts ~loc = function
 
 (* Build the left-value corresponding to [*(at + index)]. *)
 let lval_at_index ~loc kf env (e_at, vi_at, t_index) =
-  Typing.type_term ~use_gmp_opt:false ~ctx:Typing.c_int t_index;
+  Typing.type_term
+    ~use_gmp_opt:false
+    ~ctx:Typing.c_int
+    ~lenv:(Env.Local_vars.get env)
+    t_index;
   let term_to_exp = !term_to_exp_ref in
   let e_index, _, env = term_to_exp ~adata:Assert.no_data kf env t_index in
   let e_index = Cil.constFold false e_index in
@@ -265,8 +269,12 @@ let to_exp ~loc kf env pot label =
          let t_size =
            Logic_const.term ~loc (TBinOp(Mult, t_sizeof, t_size)) lty_sizeof
          in
-         Typing.type_term ~use_gmp_opt:false t_size;
-         let malloc_stmt = match Typing.get_number_ty ~lenv:(Env.Local_vars.get env) t_size with
+         Typing.type_term
+           ~use_gmp_opt:false
+           ~lenv:(Env.Local_vars.get env)
+           t_size;
+         let malloc_stmt =
+           match Typing.get_number_ty ~lenv:(Env.Local_vars.get env) t_size with
            | Typing.C_integer IInt ->
              let e_size, _, _ =
                term_to_exp ~adata:Assert.no_data kf env t_size
diff --git a/src/plugins/e-acsl/src/code_generator/libc.ml b/src/plugins/e-acsl/src/code_generator/libc.ml
index 16baa65d7dee3e0e895dc9d99c13c1771ff21383..1567ea882fa2eff467cd9e95afd181bcb7b26aba 100644
--- a/src/plugins/e-acsl/src/code_generator/libc.ml
+++ b/src/plugins/e-acsl/src/code_generator/libc.ml
@@ -25,7 +25,7 @@
 open Cil_types
 
 (* Retrieve the name of the caller function. [vorig_name] is used instead of
-   [vname] because some plugins like "Variadic" may change the value of [vname] 
+   [vname] because some plugins like "Variadic" may change the value of [vname]
    for some functions like [sprintf]. *)
 let get_caller_name caller =
   caller.vorig_name
@@ -187,7 +187,7 @@ let check_integer_bounds ~from target =
     If [check_lower_bound] is set to false, then the lower bound check is not
     performed. *)
 let term_to_sizet_exp ~loc ~name ?(check_lower_bound=true) kf env t =
-  Typing.type_term ~use_gmp_opt:false t;
+  Typing.type_term ~use_gmp_opt:false ~lenv:(Env.Local_vars.get env) t;
   match Typing.get_number_ty ~lenv:(Env.Local_vars.get env) t with
   | Typing.Gmpz ->
     let e, _, env =
diff --git a/src/plugins/e-acsl/src/code_generator/memory_translate.ml b/src/plugins/e-acsl/src/code_generator/memory_translate.ml
index d92926c81631b6b982a4baaa702632cf93e69094..3698c7cd8db6b09f4bbb0bbafbb2891394c867cf 100644
--- a/src/plugins/e-acsl/src/code_generator/memory_translate.ml
+++ b/src/plugins/e-acsl/src/code_generator/memory_translate.ml
@@ -212,7 +212,11 @@ let range_to_ptr_and_size ~adata ~loc kf env ptr r p =
           Logic_const.term ~loc (TBinOp(Mult, s, n1)) Linteger))
       (Ctype typ_charptr)
   in
-  Typing.type_term ~use_gmp_opt:false ~ctx:Typing.nan ptr;
+  Typing.type_term
+    ~use_gmp_opt:false
+    ~ctx:Typing.nan
+    ~lenv:(Env.Local_vars.get env)
+    ptr;
   let (ptr, adata), env =
     Env.with_rte_and_result env true
       ~f:(fun env ->
@@ -260,7 +264,7 @@ let range_to_ptr_and_size ~adata ~loc kf env ptr r p =
     in
     Logic_const.term ~loc (Tlet (size_term_info, size_term_if)) Linteger
   in
-  Typing.type_term ~use_gmp_opt:false size_term;
+  Typing.type_term ~use_gmp_opt:false ~lenv:(Env.Local_vars.get env) size_term;
   let size, adata, env =
     match Typing.get_number_ty size_term  ~lenv:(Env.Local_vars.get env) with
     | Typing.Gmpz ->
diff --git a/src/plugins/e-acsl/src/code_generator/translate.ml b/src/plugins/e-acsl/src/code_generator/translate.ml
index 2f359ead172364cac0338a8343d3666b8f251c7b..5ccbd1f80ed269db12e2424274c1ba240ba959ca 100644
--- a/src/plugins/e-acsl/src/code_generator/translate.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate.ml
@@ -1386,7 +1386,7 @@ let gmp_to_sizet ~adata ~loc ~name ?(check_lower_bound=true) ?pp kf env t =
           pred_name = pred_name :: lower_guard_pp.pred_name }
       in
       let lower_guard = Logic_const.prel ~loc (Rge, t, zero_term) in
-      Typing.type_named_predicate lower_guard;
+      Typing.type_named_predicate ~lenv:(Env.Local_vars.get env) lower_guard;
       let adata_lower_guard, env = Assert.empty ~loc kf env in
       let lower_guard, adata_lower_guard, env =
         predicate_to_exp ~adata:adata_lower_guard kf env lower_guard
@@ -1416,7 +1416,7 @@ let gmp_to_sizet ~adata ~loc ~name ?(check_lower_bound=true) ?pp kf env t =
       pred_name = pred_name :: upper_guard_pp.pred_name }
   in
   let upper_guard = Logic_const.prel ~loc (Rle, t, sizet_max) in
-  Typing.type_named_predicate upper_guard;
+  Typing.type_named_predicate ~lenv:(Env.Local_vars.get env) upper_guard;
   let adata_upper_guard, env = Assert.empty ~loc kf env in
   let upper_guard, adata_upper_guard, env =
     predicate_to_exp ~adata:adata_upper_guard kf env upper_guard
@@ -1500,7 +1500,7 @@ let untyped_term_to_exp typ t =
       | _ -> Typing.nan
   in
   let ctx = Option.map ctx_of_typ typ in
-  Typing.type_term ~use_gmp_opt:true ?ctx t;
+  Typing.type_term ~use_gmp_opt:true ~lenv:[] ?ctx t;
   let env = Env.push Env.empty in
   let env = Env.rte env false in
   let e, _, env =