From 81c535acb5d7676421bb3cef41a6f3f2fafcdbd4 Mon Sep 17 00:00:00 2001
From: Thibault Martin <thi.martin.pro@pm.me>
Date: Thu, 28 Sep 2023 11:06:51 +0200
Subject: [PATCH] Create Cil_builtins.is_builtin : checks for frama_c and
 special builtins

---
 src/kernel_services/ast_queries/cil_builtins.ml  | 3 +++
 src/kernel_services/ast_queries/cil_builtins.mli | 9 +++++++--
 src/plugins/eva/utils/summary.ml                 | 4 +---
 src/plugins/obfuscator/obfuscate.ml              | 3 +--
 4 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/kernel_services/ast_queries/cil_builtins.ml b/src/kernel_services/ast_queries/cil_builtins.ml
index dd19bebde39..c80b32e7484 100644
--- a/src/kernel_services/ast_queries/cil_builtins.ml
+++ b/src/kernel_services/ast_queries/cil_builtins.ml
@@ -68,6 +68,9 @@ let special_builtins = Queue.create ()
 let is_special_builtin s =
   Queue.fold (fun res f -> res || f s) false special_builtins
 
+let is_builtin v =
+  has_fc_builtin_attr v || is_special_builtin v.vname
+
 let add_special_builtin_family f = Queue.add f special_builtins
 
 let add_special_builtin s =
diff --git a/src/kernel_services/ast_queries/cil_builtins.mli b/src/kernel_services/ast_queries/cil_builtins.mli
index 270cfd97d9e..c37b7e41c86 100644
--- a/src/kernel_services/ast_queries/cil_builtins.mli
+++ b/src/kernel_services/ast_queries/cil_builtins.mli
@@ -56,10 +56,15 @@ open Cil_types
 module Frama_c_builtins:
   State_builder.Hashtbl with type key = string and type data = varinfo
 
-val is_frama_c_builtin: varinfo -> bool
-(** @return true if the given variable refers to a Frama-C builtin.
+val is_builtin: varinfo -> bool
+(** @return true if {!has_fc_builtin_attr} or {!is_special_builtin} are true.
+    @before Frama-C+dev Only check for {!has_fc_builtin_attr}.
     @since Fluorine-20130401 *)
 
+val has_fc_builtin_attr: varinfo -> bool
+(** @return true if the given variable refers to a Frama-C builtin.
+    @since Frama-C+dev *)
+
 val is_unused_builtin: varinfo -> bool
 (** @return true if the given variable refers to a Frama-C builtin that
     is not used in the current program. Plugins may (and in fact should)
diff --git a/src/plugins/eva/utils/summary.ml b/src/plugins/eva/utils/summary.ml
index 84d99db49cb..6982ec1bfee 100644
--- a/src/plugins/eva/utils/summary.ml
+++ b/src/plugins/eva/utils/summary.ml
@@ -225,9 +225,7 @@ end
 
 let consider_function vi =
   vi.Cil_types.vdefined &&
-  not (Cil_builtins.has_fc_builtin_attr vi
-       || Cil_builtins.is_special_builtin vi.vname
-       || Cil.is_in_libc vi.vattr)
+  not (Cil_builtins.is_builtin vi || Cil.is_in_libc vi.vattr)
 
 let compute_events () =
   let eva = Events.make () and kernel = Events.make () in
diff --git a/src/plugins/obfuscator/obfuscate.ml b/src/plugins/obfuscator/obfuscate.ml
index e497fb82648..fba8a49e215 100644
--- a/src/plugins/obfuscator/obfuscate.ml
+++ b/src/plugins/obfuscator/obfuscate.ml
@@ -101,8 +101,7 @@ class visitor = object
     else begin
       if Cil.isFunctionType vi.vtype then begin
         if vi.vname <> "main"
-        && not (Cil_builtins.has_fc_builtin_attr vi)
-        && not (Cil_builtins.is_special_builtin vi.vname)
+        && not (Cil_builtins.is_builtin vi)
         && not (Cil.is_in_libc vi.vattr) then
           vi.vname <- Dictionary.fresh Obfuscator_kind.Function vi.vname
       end
-- 
GitLab