From 59a46b9366135a9df70f0daa5af4345b134c374b Mon Sep 17 00:00:00 2001
From: Thibaut Benjamin <thibaut.benjamin@cea.fr>
Date: Fri, 20 Aug 2021 10:28:59 +0200
Subject: [PATCH] [e-acsl] add the propagation of a local environment

---
 src/plugins/e-acsl/src/analyses/typing.ml          | 4 ++--
 src/plugins/e-acsl/src/analyses/typing.mli         | 2 +-
 src/plugins/e-acsl/src/code_generator/translate.ml | 6 +++++-
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/plugins/e-acsl/src/analyses/typing.ml b/src/plugins/e-acsl/src/analyses/typing.ml
index 0ceb31ebeff..1eea5272392 100644
--- a/src/plugins/e-acsl/src/analyses/typing.ml
+++ b/src/plugins/e-acsl/src/analyses/typing.ml
@@ -949,8 +949,8 @@ let get_cast ~lenv t =
   try Option.map typ_of_number_ty info.cast
   with Not_a_number -> None
 
-let get_cast_of_predicate p =
-  let info = type_predicate p in
+let get_cast_of_predicate ~lenv p =
+  let info = type_predicate ~lenv p in
   try Option.map typ_of_number_ty info.cast
   with Not_a_number -> assert false
 
diff --git a/src/plugins/e-acsl/src/analyses/typing.mli b/src/plugins/e-acsl/src/analyses/typing.mli
index ac869b8770c..e56f54b73e9 100644
--- a/src/plugins/e-acsl/src/analyses/typing.mli
+++ b/src/plugins/e-acsl/src/analyses/typing.mli
@@ -138,7 +138,7 @@ val get_op: lenv:Function_params_ty.t -> term -> typ
 val get_cast: lenv:Function_params_ty.t -> term -> typ option
 (** Get the type which the given term must be converted to (if any). *)
 
-val get_cast_of_predicate: predicate -> typ option
+val get_cast_of_predicate: lenv:Function_params_ty.t -> predicate -> typ option
 (** Like {!get_cast}, but for predicates. *)
 
 val unsafe_set: term -> ?ctx:number_ty -> number_ty -> unit
diff --git a/src/plugins/e-acsl/src/code_generator/translate.ml b/src/plugins/e-acsl/src/code_generator/translate.ml
index 246079281d9..ad07712f4dc 100644
--- a/src/plugins/e-acsl/src/code_generator/translate.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate.ml
@@ -1234,7 +1234,11 @@ and predicate_to_exp ~adata ?name kf ?rte env p =
                predicate_content_to_exp ~adata ?name kf env p
              in
              let env = if rte then translate_rte kf env e else env in
-             let cast = Typing.get_cast_of_predicate p in
+             let cast =
+               Typing.get_cast_of_predicate
+                 ~lenv:(Env.Local_vars.get env)
+                 p
+             in
              Extlib.nest
                adata
                (Typed_number.add_cast
-- 
GitLab