From e9e0f8f2bec60f9c4bfeb8315325737986bef7a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Mon, 24 Jan 2022 11:35:05 +0100
Subject: [PATCH] [kernel] Optimizes the "ghost access checking" code
 transformation.

Only visits globals that are ghost or may contain ghost code.
---
 src/kernel_internals/typing/ghost_accesses.ml | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/kernel_internals/typing/ghost_accesses.ml b/src/kernel_internals/typing/ghost_accesses.ml
index f53bf468564..f02f3d92621 100644
--- a/src/kernel_internals/typing/ghost_accesses.ml
+++ b/src/kernel_internals/typing/ghost_accesses.ml
@@ -121,7 +121,7 @@ class visitor = object(self)
     Error.cannot_check_ghost_call ~source ~current:true ~once:true kf
 
   method! vglob_aux = function
-    | GFunDecl(_, vi, _) ->
+    | GFunDecl(_, vi, _) when vi.vghost ->
       self#prefer_loc (Log.get_current_source ()) ;
       let post g = self#reset_loc() ; g in
 
@@ -136,7 +136,11 @@ class visitor = object(self)
         if is_empty_funspec spec then self#bad_ghost_function kf
       end ;
       Cil.DoChildrenPost post
-    | _ -> Cil.DoChildren
+    (* Optimization: only visits ghost globals or globals that may contain
+       ghost code. *)
+    | GVarDecl (vi, _) when vi.vghost -> Cil.DoChildren
+    | GVar _ | GFun _ -> Cil.DoChildren
+    | _ -> Cil.SkipChildren
 
   method! vvdec v =
     let current, source =
-- 
GitLab