From 22203ac6f98dc926b65013797558953d03f3ae39 Mon Sep 17 00:00:00 2001
From: "Fonenantsoa Maurica (fmaurica)" <maurica.fonenantsoa@gmail.com>
Date: Wed, 28 Mar 2018 00:02:29 +0200
Subject: [PATCH] Clear environment.

---
 src/plugins/e-acsl/interval.ml  | 8 ++++++--
 src/plugins/e-acsl/interval.mli | 1 +
 src/plugins/e-acsl/translate.ml | 5 ++++-
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/plugins/e-acsl/interval.ml b/src/plugins/e-acsl/interval.ml
index 8cd31ce13cc..d38f8c36f5c 100644
--- a/src/plugins/e-acsl/interval.ml
+++ b/src/plugins/e-acsl/interval.ml
@@ -60,6 +60,7 @@ module Env = struct
   let tbl: Ival.t Logic_var.Hashtbl.t = Logic_var.Hashtbl.create 7
   let clear () = Logic_var.Hashtbl.clear tbl
   let add = Logic_var.Hashtbl.add tbl
+  let remove = Logic_var.Hashtbl.remove tbl
   let find = Logic_var.Hashtbl.find tbl
 end
 
@@ -193,9 +194,12 @@ let rec infer t =
 
   | Tlet (li,t) ->
     let li_t = Misc.term_of_li li in
+    let li_v = li.l_var_info in
     let i = infer li_t in
-    Env.add li.l_var_info i;
-    infer t
+    Env.add li_v i;
+    let i = infer t in
+    Env.remove li_v;
+    i
   | TConst (LStr _ | LWStr _ | LReal _)
   | TBinOp (PlusPI,_,_)
   | TBinOp (IndexPI,_,_)
diff --git a/src/plugins/e-acsl/interval.mli b/src/plugins/e-acsl/interval.mli
index 6fc70d29a62..b14769feb50 100644
--- a/src/plugins/e-acsl/interval.mli
+++ b/src/plugins/e-acsl/interval.mli
@@ -65,6 +65,7 @@ val interv_of_typ: Cil_types.typ -> Ival.t
 module Env: sig
   val clear: unit -> unit
   val add: Cil_types.logic_var -> Ival.t -> unit
+  val remove: Cil_types.logic_var -> unit
 end
 
 (* ************************************************************************** *)
diff --git a/src/plugins/e-acsl/translate.ml b/src/plugins/e-acsl/translate.ml
index d092f7ced5d..f746f2dbb8f 100644
--- a/src/plugins/e-acsl/translate.ml
+++ b/src/plugins/e-acsl/translate.ml
@@ -501,6 +501,7 @@ and context_insensitive_term_to_exp kf env t =
   | Tlet(li, t) ->
     let env = env_of_li li kf env loc in
     let e, env = term_to_exp kf env t in
+    Interval.Env.remove li.l_var_info;
     e, env, false, ""
 
 (* Convert an ACSL term into a corresponding C expression (if any) in the given
@@ -735,7 +736,9 @@ and named_predicate_content_to_exp ?name kf env p =
     conditional_to_exp loc None e1 res2 res3
   | Plet(li, p) ->
     let env = env_of_li li kf env loc in
-    named_predicate_to_exp kf env p
+    let e, env = named_predicate_to_exp kf env p in
+    Interval.Env.remove li.l_var_info;
+    e, env
   | Pforall _ | Pexists _ -> Quantif.quantif_to_exp kf env p
   | Pat(p, BuiltinLabel Here) ->
     named_predicate_to_exp kf env p
-- 
GitLab