From 1dac43ff74ea3de3abeef1d95f9a784d21fb51f3 Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Tue, 26 Sep 2023 14:22:21 +0200
Subject: [PATCH] [Eva] use the new Deps module

---
 .../eva/domains/cvalue/builtins_memory.ml     |  8 +++-----
 src/plugins/eva/domains/octagons.ml           | 12 +++--------
 src/plugins/eva/legacy/logic_inout.ml         |  4 ++--
 src/plugins/eva/utils/eva_utils.ml            | 20 +++----------------
 src/plugins/eva/utils/eva_utils.mli           | 10 ++--------
 5 files changed, 13 insertions(+), 41 deletions(-)

diff --git a/src/plugins/eva/domains/cvalue/builtins_memory.ml b/src/plugins/eva/domains/cvalue/builtins_memory.ml
index 073fc79acf0..c9d89b45120 100644
--- a/src/plugins/eva/domains/cvalue/builtins_memory.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_memory.ml
@@ -148,9 +148,7 @@ let frama_c_memcpy name state actuals =
           let (deps_table, sure_zone) =
             let zone_dst = enumerate_valid_bits Locations.Write  loc_dst in
             let zone_src = enumerate_valid_bits Locations.Read loc_src in
-            let deps =
-              Function_Froms.(Deps.add_data_dep Deps.bottom zone_src)
-            in
+            let deps = Deps.data zone_src in
             (* Note: actually a part may be written for sure (if the
                difference between the offsets in loc_dst is smaller
                than size), but keeping it imprecise reflects more the
@@ -192,10 +190,10 @@ let frama_c_memcpy name state actuals =
       let loc_src = make_loc (Location_Bits.shift range src) size_char in
       let loc_dst = make_loc (Location_Bits.shift range dst) size_char in
       let c_from =
-        let open Function_Froms in
         let zone_src = enumerate_valid_bits Locations.Read loc_src in
         let zone_dst = enumerate_valid_bits Locations.Write  loc_dst in
-        let deps = Deps.add_data_dep Deps.bottom zone_src in
+        let deps = Deps.data zone_src in
+        let open Function_Froms in
         let deps_table =
           Memory.add_binding ~exact:false precise_deps_table zone_dst deps
         in
diff --git a/src/plugins/eva/domains/octagons.ml b/src/plugins/eva/domains/octagons.ml
index 6ba460b8da9..2cbaa286e14 100644
--- a/src/plugins/eva/domains/octagons.ml
+++ b/src/plugins/eva/domains/octagons.ml
@@ -56,7 +56,7 @@ let typ_kind typ =
   | TFloat _ -> Float
   | _ -> assert false
 
-type dependencies = Eva_utils.deps = {
+type dependencies = Deps.t = {
   data: Locations.Zone.t;
   indirect: Locations.Zone.t;
 }
@@ -836,12 +836,6 @@ end
 
 module VariableToDeps =
 struct
-  module Deps =
-  struct
-    include Function_Froms.Deps
-    let pretty_debug = pretty_precise
-  end
-
   let cache_prefix = "Eva.Octagons.VariableToDeps"
 
   include Hptmap.Make (Variable) (Deps) (Hptmap.Comp_unused)
@@ -1040,7 +1034,7 @@ module Deps = struct
       BaseToVariables.add_deps var deps i
     in
     match VariableToDeps.find_opt var m with
-    | Some previous_deps when Function_Froms.Deps.equal previous_deps deps ->
+    | Some previous_deps when Deps.equal previous_deps deps ->
       m, i
     | Some previous_deps when not (are_bases_increasing previous_deps deps) ->
       (* If [var] already exists in the state and had bigger dependencies (a
@@ -1053,7 +1047,7 @@ module Deps = struct
      contain variables that do not appear in [m]. *)
   let add var deps (m, i: t): t =
     match VariableToDeps.find_opt var m with
-    | Some d when Function_Froms.Deps.equal d deps -> m, i
+    | Some d when Deps.equal d deps -> m, i
     | _ ->
       VariableToDeps.add var deps m,
       BaseToVariables.add_deps var deps i
diff --git a/src/plugins/eva/legacy/logic_inout.ml b/src/plugins/eva/legacy/logic_inout.ml
index 03c6ee235ba..e1239bd8a79 100644
--- a/src/plugins/eva/legacy/logic_inout.ml
+++ b/src/plugins/eva/legacy/logic_inout.ml
@@ -165,8 +165,8 @@ let check_from pre_state asgn assigns_zone from found_froms =
   let eval = eval_assigns_from pre_state in
   let stated_indirect_deps = link (List.map eval indirect_deps) in
   let stated_direct_deps = link (List.map eval direct_deps) in
-  let found_direct_deps = found_deps.Function_Froms.Deps.data in
-  let found_indirect_deps = found_deps.Function_Froms.Deps.indirect in
+  let found_direct_deps = found_deps.Deps.data in
+  let found_indirect_deps = found_deps.Deps.indirect in
   let res_for_unknown txt =
     Self.debug "found_direct deps %a stated_direct_deps %a \
                 found_indirect_deps %a stated_indirect_deps %a"
diff --git a/src/plugins/eva/utils/eva_utils.ml b/src/plugins/eva/utils/eva_utils.ml
index e1a9d043fec..8741fe7ea42 100644
--- a/src/plugins/eva/utils/eva_utils.ml
+++ b/src/plugins/eva/utils/eva_utils.ml
@@ -285,20 +285,6 @@ let lval_to_exp =
   MemoLvalToExp.memo
     (fun lv -> Cil.new_exp ~loc:Cil_datatype.Location.unknown (Lval lv))
 
-type deps = Function_Froms.Deps.deps = {
-  data: Locations.Zone.t;
-  indirect: Locations.Zone.t;
-}
-
-let bottom_deps =
-  { data = Locations.Zone.bottom; indirect = Locations.Zone.bottom }
-
-let join_deps a b =
-  { data = Locations.Zone.join a.data b.data;
-    indirect = Locations.Zone.join a.indirect b.indirect; }
-
-let deps_to_zone deps = Locations.Zone.join deps.data deps.indirect
-
 (* Computation of the inputs of an expression. *)
 let rec deps_of_expr find_loc expr =
   let rec process expr = match expr.enode with
@@ -310,7 +296,7 @@ let rec deps_of_expr find_loc expr =
       process e
     | BinOp (_, e1, e2, _) ->
       (* Binary operators. *)
-      join_deps (process e1) (process e2)
+      Deps.join (process e1) (process e2)
     | StartOf lv | AddrOf lv ->
       (* computation of an address: the inputs of the lvalue whose address
          is computed are read to compute said address. *)
@@ -318,11 +304,11 @@ let rec deps_of_expr find_loc expr =
         indirect = Locations.Zone.bottom; }
     | Const _ | SizeOf _ | AlignOf _ | SizeOfStr _ | SizeOfE _ | AlignOfE _ ->
       (* static constructs, nothing is read to evaluate them. *)
-      bottom_deps
+      Deps.bottom
   in
   process expr
 
-and zone_of_expr find_loc expr = deps_to_zone (deps_of_expr find_loc expr)
+and zone_of_expr find_loc expr = Deps.to_zone (deps_of_expr find_loc expr)
 
 (* dereference of an lvalue: first, its address must be computed,
    then its contents themselves are read *)
diff --git a/src/plugins/eva/utils/eva_utils.mli b/src/plugins/eva/utils/eva_utils.mli
index b7c7a84512a..2e6380b1ba6 100644
--- a/src/plugins/eva/utils/eva_utils.mli
+++ b/src/plugins/eva/utils/eva_utils.mli
@@ -126,18 +126,12 @@ val indirect_zone_of_lval:
     on which the offset and the pointer expression (if any) of an lvalue depend.
 *)
 
-
-type deps = Function_Froms.Deps.deps = {
-  data: Locations.Zone.t;
-  indirect: Locations.Zone.t;
-}
-
 val deps_of_expr:
-  (lval -> Precise_locs.precise_location) -> exp -> deps
+  (lval -> Precise_locs.precise_location) -> exp -> Deps.t
 (** Given a function computing the location of lvalues, computes the memory
     dependencies of an expression. *)
 
-val deps_of_lval: (lval -> Precise_locs.precise_location) -> lval -> deps
+val deps_of_lval: (lval -> Precise_locs.precise_location) -> lval -> Deps.t
 (** Given a function computing the location of lvalues, computes the memory
     dependencies of an lvalue. *)
 
-- 
GitLab