From 0561a0350828fe5e8becb6d74eefe4b7572c81d2 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Thu, 5 Jul 2018 16:34:41 +0200
Subject: [PATCH] Avoid messing up with visitor correspondance tables

---
 src/plugins/e-acsl/label.ml     |  6 +++---
 src/plugins/e-acsl/translate.ml |  3 +--
 src/plugins/e-acsl/visit.ml     | 25 +------------------------
 3 files changed, 5 insertions(+), 29 deletions(-)

diff --git a/src/plugins/e-acsl/label.ml b/src/plugins/e-acsl/label.ml
index 9887ef2a37a..89949e3c727 100644
--- a/src/plugins/e-acsl/label.ml
+++ b/src/plugins/e-acsl/label.ml
@@ -52,9 +52,9 @@ let move (vis:Visitor.generic_frama_c_visitor) ~old new_stmt =
       (* invariant of this method: [s = Cil.memo_stmt vis#behavior orig_stmt] *)
       method !vstmt_aux s = match s.skind, orig_stmt.skind with
       | Goto(s_ref, _), Goto(orig_ref, _) ->
-        if Cil_datatype.Stmt.equal !s_ref old && s_ref != orig_ref then
-          (* Forward goto: it has already been visited and there is no more
-             sharing. Must update the reference. *)
+        if Cil_datatype.Stmt.equal !orig_ref old && s_ref != orig_ref then
+          (* Forward goto: it has already been visited.
+             We must update the reference. *)
           s_ref := new_stmt;
         Cil.SkipChildren
       | _ -> Cil.DoChildren
diff --git a/src/plugins/e-acsl/translate.ml b/src/plugins/e-acsl/translate.ml
index 9726a521bee..db194ddf24c 100644
--- a/src/plugins/e-acsl/translate.ml
+++ b/src/plugins/e-acsl/translate.ml
@@ -663,8 +663,7 @@ and at_to_exp env t_opt label e =
   end
   in
   let bhv = Env.get_behavior new_env in
-  let new_stmt = Visitor.visitFramacStmt o (Cil.get_stmt bhv stmt) in
-  Cil.set_stmt bhv stmt new_stmt;
+  ignore( Visitor.visitFramacStmt o (Cil.get_stmt bhv stmt));
   res, !env_ref, false
 
 and env_of_li li kf env loc =
diff --git a/src/plugins/e-acsl/visit.ml b/src/plugins/e-acsl/visit.ml
index c2c928a4161..a65afdce47a 100644
--- a/src/plugins/e-acsl/visit.ml
+++ b/src/plugins/e-acsl/visit.ml
@@ -742,15 +742,13 @@ you must call function `%s' and `__e_acsl_memory_clean by yourself.@]"
       in
       let must_model = Mmodel_analysis.must_model_lval ~stmt ~kf lv in
       if not (may_safely_ignore lv) && must_model then
-        let before = Cil.memo_stmt self#behavior stmt in
+        let before = Cil.mkStmt stmt.skind in
         let new_stmt = Project.on prj (Misc.mk_initialize ~loc) lv in
-        let new_stmt = Cil.memo_stmt self#behavior new_stmt in
         let env = Env.add_stmt ~post ~before env new_stmt in
         let env = match vi with
           | None -> env
           | Some vi ->
             let new_stmt = Project.on prj Misc.mk_store_stmt vi in
-            let new_stmt = Cil.memo_stmt self#behavior new_stmt in
             Env.add_stmt ~post ~before env new_stmt
         in
         env
@@ -891,27 +889,6 @@ you must call function `%s' and `__e_acsl_memory_clean by yourself.@]"
     end else
       Cil.SkipChildren
 
-  method !vterm _ =
-    Cil.DoChildrenPost
-      (fun t ->
-        (match t.term_node with
-        | Tat(_, StmtLabel s_ref) ->
-          (* the label may have been moved,
-             so move the corresponding reference *)
-          s_ref := E_acsl_label.new_labeled_stmt !s_ref
-        | _ -> ());
-        t)
-
-  method !vpredicate_node _ =
-    Cil.DoChildrenPost
-      (function
-      | Pat(_, StmtLabel s_ref) as p ->
-          (* the label may have been moved,
-             so move the corresponding reference *)
-        s_ref := E_acsl_label.new_labeled_stmt !s_ref;
-        p
-      | p -> p);
-
   initializer
     Misc.reset ();
     Literal_strings.reset ();
-- 
GitLab