From 55b4eb1c46c1179003a30feb19268eb716e00a9d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Thu, 20 Jun 2024 08:36:52 +0200
Subject: [PATCH] [kernel] fix mergeCil with modules

---
 src/kernel_internals/typing/mergecil.ml      |  2 +-
 src/kernel_services/ast_queries/logic_env.ml |  2 ++
 tests/spec/bar.i                             | 10 ++++++++++
 tests/spec/foo.i                             | 11 +++++++++++
 tests/spec/oracle/foo.res.oracle             | 11 +++++++++++
 5 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 tests/spec/bar.i
 create mode 100644 tests/spec/foo.i
 create mode 100644 tests/spec/oracle/foo.res.oracle

diff --git a/src/kernel_internals/typing/mergecil.ml b/src/kernel_internals/typing/mergecil.ml
index b4d19c325b..4ce813edc8 100644
--- a/src/kernel_internals/typing/mergecil.ml
+++ b/src/kernel_internals/typing/mergecil.ml
@@ -643,7 +643,7 @@ let lfEq = LogicMerging.create_eq_table 111 (* Logic functions *)
 let ltEq = PlainMerging.create_eq_table 111 (* Logic types *)
 let lcEq = PlainMerging.create_eq_table 111 (* Logic constructors *)
 
-let laEq = PlainMerging.create_eq_table 111 (* Axiomatics *)
+let laEq = PlainMerging.create_eq_table 111 (* Axiomatics & Modules *)
 let llEq = PlainMerging.create_eq_table 111 (* Lemmas *)
 
 let lvEq = VolatileMerging.create_eq_table 111
diff --git a/src/kernel_services/ast_queries/logic_env.ml b/src/kernel_services/ast_queries/logic_env.ml
index 09a6dbce04..585945a27d 100644
--- a/src/kernel_services/ast_queries/logic_env.ml
+++ b/src/kernel_services/ast_queries/logic_env.ml
@@ -183,6 +183,7 @@ let init_dependencies from =
       Logic_ctor_info.self;
       Lemmas.self;
       Axiomatics.self;
+      Modules.self;
       Model_info.self;
     ]
 
@@ -350,6 +351,7 @@ let prepare_tables () =
   Logic_info.clear ();
   Lemmas.clear ();
   Axiomatics.clear();
+  Modules.clear();
   Model_info.clear ();
   Logic_type_builtin.iter Logic_type_info.add;
   Logic_ctor_builtin.iter Logic_ctor_info.add;
diff --git a/tests/spec/bar.i b/tests/spec/bar.i
new file mode 100644
index 0000000000..8ebaf7de02
--- /dev/null
+++ b/tests/spec/bar.i
@@ -0,0 +1,10 @@
+/* run.config
+   DONTRUN: Companion file of foo.i
+*/
+
+/*@
+  module A {
+    type t;
+    logic t op(t x);
+  }
+  */
diff --git a/tests/spec/foo.i b/tests/spec/foo.i
new file mode 100644
index 0000000000..f41b48bf59
--- /dev/null
+++ b/tests/spec/foo.i
@@ -0,0 +1,11 @@
+/* run.config
+  DEPS: bar.i
+  OPT: bar.i -print
+  */
+
+/*@
+  module A {
+    type t;
+    logic t op(t x);
+  }
+  */
diff --git a/tests/spec/oracle/foo.res.oracle b/tests/spec/oracle/foo.res.oracle
new file mode 100644
index 0000000000..50873ff7f5
--- /dev/null
+++ b/tests/spec/oracle/foo.res.oracle
@@ -0,0 +1,11 @@
+[kernel] Parsing foo.i (no preprocessing)
+[kernel] Parsing bar.i (no preprocessing)
+/* Generated by Frama-C */
+/*@ module A {
+      type t;
+      
+      logic t op(t x) ;
+      
+      }
+ */
+
-- 
GitLab