From 5af97862d6a0f7518714804b3c1c763e60ef7b25 Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Tue, 28 Jan 2025 15:57:53 +0100
Subject: [PATCH] [e-acsl] use Datatype.undefined for Misc.Id_term.compare

---
 src/plugins/e-acsl/src/analyses/interval.ml            | 2 +-
 src/plugins/e-acsl/src/libraries/analyses_datatype.ml  | 7 ++++---
 src/plugins/e-acsl/src/libraries/analyses_datatype.mli | 2 +-
 src/plugins/e-acsl/src/libraries/misc.ml               | 6 ++----
 src/plugins/e-acsl/src/libraries/misc.mli              | 2 +-
 5 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/src/plugins/e-acsl/src/analyses/interval.ml b/src/plugins/e-acsl/src/analyses/interval.ml
index c9f3d079fec..e5a247efe9b 100644
--- a/src/plugins/e-acsl/src/analyses/interval.ml
+++ b/src/plugins/e-acsl/src/analyses/interval.ml
@@ -138,7 +138,7 @@ end = struct
     = Id_term_in_profile.Hashtbl.create 97
 
   (* Small functor to access the result of a memoized inference *)
-  module Accesses (X : Datatype.S_with_collections)
+  module Accesses (X : Datatype.S_with_hashtbl)
       (Tbl: sig val tbl : ival Error.result X.Hashtbl.t end)
     : sig
       val get : X.Hashtbl.key -> ival Error.result
diff --git a/src/plugins/e-acsl/src/libraries/analyses_datatype.ml b/src/plugins/e-acsl/src/libraries/analyses_datatype.ml
index 831323f60a4..a224e8849ee 100644
--- a/src/plugins/e-acsl/src/libraries/analyses_datatype.ml
+++ b/src/plugins/e-acsl/src/libraries/analyses_datatype.ml
@@ -361,9 +361,10 @@ struct
 end
 
 module Id_term_in_profile =
-  Datatype.Pair_with_collections
-    (Misc.Id_term)
-    (Profile)
+  Datatype.With_hashtbl
+    (Datatype.Pair
+       (Misc.Id_term)
+       (Profile))
     (struct let module_name = "E_ACSL.Analyse.Id_term_in_profile" end)
 
 (* Environment to handle recursive functions: this environment stores the logic
diff --git a/src/plugins/e-acsl/src/libraries/analyses_datatype.mli b/src/plugins/e-acsl/src/libraries/analyses_datatype.mli
index 7981716f80c..fcfc175386b 100644
--- a/src/plugins/e-acsl/src/libraries/analyses_datatype.mli
+++ b/src/plugins/e-acsl/src/libraries/analyses_datatype.mli
@@ -68,7 +68,7 @@ end
 (** term with a profile: a term inside a logic function or predicate may
     contain free variables. The profile indicates the interval for those
     free variables. *)
-module Id_term_in_profile: Datatype.S_with_collections
+module Id_term_in_profile: Datatype.S_with_hashtbl
   with type t = term * Profile.t
 
 (** profile of logic function or predicate: a logic info representing a logic
diff --git a/src/plugins/e-acsl/src/libraries/misc.ml b/src/plugins/e-acsl/src/libraries/misc.ml
index 3c8849e72a9..3ca15998165 100644
--- a/src/plugins/e-acsl/src/libraries/misc.ml
+++ b/src/plugins/e-acsl/src/libraries/misc.ml
@@ -213,13 +213,11 @@ let name_of_binop = function
   | MinusPP | MinusPI | PlusPI -> assert false
 
 module Id_term =
-  Datatype.Make_with_collections
+  Datatype.Make_with_hashtbl
     (struct
       include Cil_datatype.Term
       let name = "E_ACSL.Id_term"
-      let compare _ _ =
-        (* There is no sound comparison based on physical identity. *)
-        Kernel.fatal "Id_term: comparison undefined (and undefinable)"
+      let compare = Datatype.undefined
       let equal (t1:term) t2 = t1 == t2
       let structural_descr = Structural_descr.t_abstract
       let rehash = Datatype.identity
diff --git a/src/plugins/e-acsl/src/libraries/misc.mli b/src/plugins/e-acsl/src/libraries/misc.mli
index 82f6b580aa3..f53ee5b4ae8 100644
--- a/src/plugins/e-acsl/src/libraries/misc.mli
+++ b/src/plugins/e-acsl/src/libraries/misc.mli
@@ -81,7 +81,7 @@ val name_of_binop: binop -> string
 val finite_min_and_max: Ival.t -> Integer.t * Integer.t
 (** [finite_min_and_max i] takes the finite ival [i] and returns its bounds. *)
 
-module Id_term: Datatype.S_with_collections with type t = term
+module Id_term: Datatype.S_with_hashtbl with type t = term
 (** Datatype for terms that relies on physical equality.
     Note that of its collections only [Hashtbl] can be used.
     Using [Map] and [Set] raises a fatal error as they require a comparison
-- 
GitLab