From 739712eacb73f25ed9eee3007bac1dfcf7dcb9a3 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Fri, 11 Mar 2022 13:09:59 +0100
Subject: [PATCH] [kernel] Fix identification of enums in ast diff

same issue as with compinfo
---
 src/kernel_services/ast_queries/ast_diff.ml | 10 +++++-----
 tests/syntax/ast_diff_1.i                   |  4 +++-
 tests/syntax/ast_diff_2.i                   |  4 +++-
 tests/syntax/oracle/ast_diff_1.res.oracle   |  1 +
 4 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/kernel_services/ast_queries/ast_diff.ml b/src/kernel_services/ast_queries/ast_diff.ml
index be7053cfa7f..e8173fb6c8e 100644
--- a/src/kernel_services/ast_queries/ast_diff.ml
+++ b/src/kernel_services/ast_queries/ast_diff.ml
@@ -362,12 +362,12 @@ let find_candidate_compinfo ?loc:_loc ci =
 
 let find_candidate_enuminfo ?loc:_loc ei =
   if Globals.Types.mem_type Logic_typing.Enum ei.ename then begin
-    match Globals.Types.global Logic_typing.Enum ei.ename with
-    | GEnumTag(ei,_) | GEnumTagDecl(ei,_) -> Some ei
-    | g ->
+    match Globals.Types.find_type Logic_typing.Enum ei.ename with
+    | TEnum(ei,_) -> Some ei
+    | t ->
       Kernel.fatal
-        "Expected enumeration definition instead of %a"
-        Cil_datatype.Global.pretty g
+        "Expected enuminfo instead of %a"
+        Printer.pp_typ t
   end else None
 
 let find_candidate_varinfo ?loc:_loc vi where =
diff --git a/tests/syntax/ast_diff_1.i b/tests/syntax/ast_diff_1.i
index 80d699482c5..aada6a5b26a 100644
--- a/tests/syntax/ast_diff_1.i
+++ b/tests/syntax/ast_diff_1.i
@@ -77,4 +77,6 @@ struct s;
 
 extern struct s s;
 
-struct s* use_s() { return &s; }
+enum e;
+
+struct s* use_s() { enum e* x; return &s; }
diff --git a/tests/syntax/ast_diff_2.i b/tests/syntax/ast_diff_2.i
index bd8d7e8f1f8..c0935612c3d 100644
--- a/tests/syntax/ast_diff_2.i
+++ b/tests/syntax/ast_diff_2.i
@@ -70,4 +70,6 @@ void local_var_use(int w, int q[][w]) {
 
 extern struct s s;
 
-struct s* use_s() { return &s; }
+enum e;
+
+struct s* use_s() { enum e* x; return &s; }
diff --git a/tests/syntax/oracle/ast_diff_1.res.oracle b/tests/syntax/oracle/ast_diff_1.res.oracle
index 1286ff511f9..d0b45c4af63 100644
--- a/tests/syntax/oracle/ast_diff_1.res.oracle
+++ b/tests/syntax/oracle/ast_diff_1.res.oracle
@@ -9,6 +9,7 @@
 [AST diff test] Variable y:  => t
 [AST diff test] Variable s:  => s
 [AST diff test] Variable use_s:  => use_s
+[AST diff test] Variable x:  => x
 [AST diff test] Variable has_static_local_x:  => has_static_local_y
 [AST diff test] Variable X:  => X
 [AST diff test] Variable Y: N/A
-- 
GitLab