From e6422723eb0bb0cfe8596bc2001256c377917b52 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Thu, 7 Jan 2021 16:03:01 +0100
Subject: [PATCH] [aorai] register Frama_C_aorai_show_state as builtin

---
 .../aorai/aorai_eva_analysis.enabled.ml       | 19 +++++++++++++--
 tests/libc/oracle/fc_libc.2.res.oracle        |  1 -
 tests/libc/oracle/fc_libc.5.res.oracle        |  1 -
 tests/syntax/oracle/bts1553_2.res.oracle      |  4 ++++
 .../oracle/check_builtin_bts1440.res.oracle   |  2 ++
 .../syntax/oracle/static_formals_1.res.oracle | 24 +++++++++----------
 6 files changed, 35 insertions(+), 16 deletions(-)

diff --git a/src/plugins/aorai/aorai_eva_analysis.enabled.ml b/src/plugins/aorai/aorai_eva_analysis.enabled.ml
index 007c6ed88fe..5b481c60b1d 100644
--- a/src/plugins/aorai/aorai_eva_analysis.enabled.ml
+++ b/src/plugins/aorai/aorai_eva_analysis.enabled.ml
@@ -34,10 +34,19 @@ let show_aorai_variable state fmt var_name =
        Z.Overflow | Not_found ->
     Format.fprintf fmt "?"
 
-let builtin_show_aorai_state state _args =
+let show_val fmt (expr, v, _) =
+  Format.fprintf fmt "%a in %a"
+    Printer.pp_exp expr
+    (Cvalue.V.pretty_typ (Some (Cil.typeOf expr))) v
+
+let builtin_show_aorai_state state args =
   let history = Data_for_aorai.(curState :: (whole_history ())) in
   Aorai_option.result ~current:true "@[<hv>%a@]"
     (Pretty_utils.pp_list ~sep:" <- " (show_aorai_variable state)) history;
+  if args <> [] then begin
+    Aorai_option.result ~current:true "@[<hv>%a@]"
+      (Pretty_utils.pp_list ~sep:"," show_val) args
+  end;
   (* Return value : returns nothing, changes nothing *)
   {
     Value_types.c_values = [None, state];
@@ -46,8 +55,14 @@ let builtin_show_aorai_state state _args =
     c_cacheable = Value_types.Cacheable;
   }
 
+let show_aorai_state = "Frama_C_show_aorai_state"
+
+let () =
+  Cil_builtins.add_custom_builtin
+    (fun () -> (show_aorai_state,Cil.voidType,[],true))
+
 let () =
-  !Db.Value.register_builtin "Frama_C_show_aorai_state" builtin_show_aorai_state
+  !Db.Value.register_builtin show_aorai_state builtin_show_aorai_state
 
 let add_slevel_annotation vi kind =
   match kind with
diff --git a/tests/libc/oracle/fc_libc.2.res.oracle b/tests/libc/oracle/fc_libc.2.res.oracle
index 852a3378808..b1e1247a436 100644
--- a/tests/libc/oracle/fc_libc.2.res.oracle
+++ b/tests/libc/oracle/fc_libc.2.res.oracle
@@ -42,7 +42,6 @@ skipping share/libc/__fc_machdep_linux_shared.h
 [kernel] Parsing share/libc/__fc_select.h (with preprocessing)
 [kernel] Parsing share/libc/__fc_string_axiomatic.h (with preprocessing)
 [kernel] Parsing share/libc/alloca.h (with preprocessing)
-[kernel] Parsing share/libc/aorai/aorai.h (with preprocessing)
 [kernel] Parsing share/libc/arpa/inet.h (with preprocessing)
 [kernel] Parsing share/libc/assert.h (with preprocessing)
 [kernel] Parsing share/libc/byteswap.h (with preprocessing)
diff --git a/tests/libc/oracle/fc_libc.5.res.oracle b/tests/libc/oracle/fc_libc.5.res.oracle
index 3c89feea03b..73dac90425a 100644
--- a/tests/libc/oracle/fc_libc.5.res.oracle
+++ b/tests/libc/oracle/fc_libc.5.res.oracle
@@ -1,2 +1 @@
 #include "__fc_integer.h"
-#include "aorai/aorai.h"
diff --git a/tests/syntax/oracle/bts1553_2.res.oracle b/tests/syntax/oracle/bts1553_2.res.oracle
index 9293259fe56..93dacee5149 100644
--- a/tests/syntax/oracle/bts1553_2.res.oracle
+++ b/tests/syntax/oracle/bts1553_2.res.oracle
@@ -5,6 +5,8 @@
   struct a {
      int b ;
   };
+  /* compiler builtin: 
+     void Frama_C_show_aorai_state(...);   */
   /* compiler builtin: 
      __builtin_va_list __builtin_next_arg(void);   */
   /* compiler builtin: 
@@ -40,6 +42,8 @@
   struct a {
      int b ;
   };
+  /* compiler builtin: 
+     void Frama_C_show_aorai_state(...);   */
   /* compiler builtin: 
      __builtin_va_list __builtin_next_arg(void);   */
   /* compiler builtin: 
diff --git a/tests/syntax/oracle/check_builtin_bts1440.res.oracle b/tests/syntax/oracle/check_builtin_bts1440.res.oracle
index 510a8f2b3ab..f81e5813ccc 100644
--- a/tests/syntax/oracle/check_builtin_bts1440.res.oracle
+++ b/tests/syntax/oracle/check_builtin_bts1440.res.oracle
@@ -2,6 +2,8 @@
 [kernel:file:print-one] 
   result of parsing tests/syntax/check_builtin_bts1440.i:
   /* Generated by Frama-C */
+  void Frama_C_show_aorai_state(...);
+  
   void __builtin__Exit(int);
   
   int __builtin___fprintf_chk(void *, int, char const * , ...);
diff --git a/tests/syntax/oracle/static_formals_1.res.oracle b/tests/syntax/oracle/static_formals_1.res.oracle
index 94353adf96c..f3dc98b3d30 100644
--- a/tests/syntax/oracle/static_formals_1.res.oracle
+++ b/tests/syntax/oracle/static_formals_1.res.oracle
@@ -1,24 +1,24 @@
 [kernel] Parsing tests/syntax/static_formals_1.c (with preprocessing)
 [kernel] Parsing tests/syntax/static_formals_2.c (with preprocessing)
 /* Generated by Frama-C */
-/*@ requires /* vid:25, lvid:25 */x < 10; */
-static int /* vid:58 */f(int /* vid:25, lvid:25 */x);
+/*@ requires /* vid:26, lvid:26 */x < 10; */
+static int /* vid:60 */f(int /* vid:26, lvid:26 */x);
 
-int /* vid:30 */g(void)
+int /* vid:31 */g(void)
 {
-  int /* vid:31 */tmp;
-  /* vid:31 */tmp = /* vid:58 */f(4);
-  return /* vid:31 */tmp;
+  int /* vid:32 */tmp;
+  /* vid:32 */tmp = /* vid:60 */f(4);
+  return /* vid:32 */tmp;
 }
 
-/*@ requires /* vid:53, lvid:53 */x < 10; */
-static int /* vid:59 */f_0(int /* vid:53, lvid:53 */x);
+/*@ requires /* vid:55, lvid:55 */x < 10; */
+static int /* vid:61 */f_0(int /* vid:55, lvid:55 */x);
 
-int /* vid:56 */h(void)
+int /* vid:58 */h(void)
 {
-  int /* vid:57 */tmp;
-  /* vid:57 */tmp = /* vid:59 */f_0(6);
-  return /* vid:57 */tmp;
+  int /* vid:59 */tmp;
+  /* vid:59 */tmp = /* vid:61 */f_0(6);
+  return /* vid:59 */tmp;
 }
 
 
-- 
GitLab