From fe36d79933d4fd5f24a8cdb090fcc53aa75722b9 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Wed, 25 Mar 2020 19:13:38 +0100
Subject: [PATCH] [libc] better support for SIG_DFL, SIG_IGN and SIG_ERR

so that Eva won't raise an alarm on them.
---
 share/libc/signal.h                           |  10 +-
 .../ast_printing/cil_printer.ml               |  20 ++-
 tests/libc/oracle/signal_h.res.oracle         |   2 +-
 tests/value/invalid_pointer.c                 |   5 +
 .../value/oracle/invalid_pointer.0.res.oracle | 166 ++++++++++--------
 .../value/oracle/invalid_pointer.1.res.oracle |  98 ++++++-----
 6 files changed, 178 insertions(+), 123 deletions(-)

diff --git a/share/libc/signal.h b/share/libc/signal.h
index 3cd1853ea45..01f6d674da7 100644
--- a/share/libc/signal.h
+++ b/share/libc/signal.h
@@ -46,9 +46,13 @@ typedef void (*__fc_sighandler_t) (int);
 /* for BSD 4.4 */
 typedef __fc_sighandler_t sig_t;
 
-#define SIG_DFL ((__fc_sighandler_t)0)     /* default signal handling */
-#define SIG_IGN ((__fc_sighandler_t)1)     /* ignore signal */
-#define SIG_ERR ((__fc_sighandler_t)-1)    /* error return from signal */
+extern sig_t __fc_sig_dfl;
+extern sig_t __fc_sig_ign;
+extern sig_t __fc_sig_err;
+
+#define SIG_DFL __fc_sig_dfl     /* default signal handling */
+#define SIG_IGN __fc_sig_ign     /* ignore signal */
+#define SIG_ERR __fc_sig_err    /* error return from signal */
 
 #define SIG_BLOCK 0
 #define SIG_UNBLOCK 1
diff --git a/src/kernel_services/ast_printing/cil_printer.ml b/src/kernel_services/ast_printing/cil_printer.ml
index 37a6a46cd2c..186378fef09 100644
--- a/src/kernel_services/ast_printing/cil_printer.ml
+++ b/src/kernel_services/ast_printing/cil_printer.ml
@@ -54,6 +54,16 @@ module Extensions = struct
 end
 let set_extension_handler = Extensions.set_handler
 
+let rename_builtins = Datatype.String.Hashtbl.create 17
+
+let () =
+  List.iter (fun (x,y) -> Datatype.String.Hashtbl.add rename_builtins x y)
+    [
+      "__fc_sig_dfl", "SIG_DFL";
+      "__fc_sig_ign", "SIG_IGN";
+      "__fc_sig_err", "SIG_ERR";
+    ]
+
 (* Deprecated functions *)
 let set_deprecated_extension_handler = Extensions.set_deprecated_handler
 
@@ -642,7 +652,15 @@ class cil_printer () = object (self)
     | CEnum {einame = s} -> self#varname fmt s
 
   (*** VARIABLES ***)
-  method varname fmt v = pp_print_string fmt v
+  method varname fmt v =
+    let v =
+      if not (Kernel.PrintLibc.get ()) &&
+         Datatype.String.Hashtbl.mem rename_builtins v
+      then
+        Datatype.String.Hashtbl.find rename_builtins v
+      else v
+    in
+    pp_print_string fmt v
 
   (* variable use *)
   method varinfo fmt v =
diff --git a/tests/libc/oracle/signal_h.res.oracle b/tests/libc/oracle/signal_h.res.oracle
index 9d071e5884c..2b9a206e15c 100644
--- a/tests/libc/oracle/signal_h.res.oracle
+++ b/tests/libc/oracle/signal_h.res.oracle
@@ -126,7 +126,7 @@
   function sigaction: precondition 'valid_read_act_or_null' got status valid.
 [eva] tests/libc/signal_h.c:48: 
   function sigaction: precondition 'separation,separated_acts' got status valid.
-[eva] share/libc/signal.h:212: 
+[eva] share/libc/signal.h:216: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic coercion struct sigaction -> set<struct sigaction>
 [eva] Done for function sigaction
 [eva] computing for function sigaction <- main.
diff --git a/tests/value/invalid_pointer.c b/tests/value/invalid_pointer.c
index bde7ed009dc..09d7babf80b 100644
--- a/tests/value/invalid_pointer.c
+++ b/tests/value/invalid_pointer.c
@@ -5,6 +5,7 @@
 
 #include <__fc_builtin.h>
 #include <stdint.h>
+#include <signal.h>
 
 /* Tests the emission of \object_pointer alarms when -warn-invalid-pointer
    is enabled. The second run should emit no alarm. */
@@ -175,4 +176,8 @@ void main () {
   union_pointer ();
   write_pointer ();
   object_pointer_predicate ();
+   // should not emit an alarm
+  signal (SIGUSR1, SIG_IGN);
+  signal (SIGUSR2, SIG_ERR);
+  signal (SIGUNUSED, SIG_DFL);
 }
diff --git a/tests/value/oracle/invalid_pointer.0.res.oracle b/tests/value/oracle/invalid_pointer.0.res.oracle
index 4f0f2133ff5..4d5ac453516 100644
--- a/tests/value/oracle/invalid_pointer.0.res.oracle
+++ b/tests/value/oracle/invalid_pointer.0.res.oracle
@@ -1,5 +1,5 @@
 [kernel] Parsing tests/value/invalid_pointer.c (with preprocessing)
-[kernel:typing:int-conversion] tests/value/invalid_pointer.c:111: Warning: 
+[kernel:typing:int-conversion] tests/value/invalid_pointer.c:112: Warning: 
   Conversion from a pointer to an integer without an explicit cast
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
@@ -8,173 +8,183 @@
   NULL[rbits 80 to 247] ∈ [--..--]
   undet ∈ [--..--]
 [eva] computing for function pointer_computation <- main.
-  Called from tests/value/invalid_pointer.c:171.
-[eva:alarm] tests/value/invalid_pointer.c:19: Warning: 
+  Called from tests/value/invalid_pointer.c:172.
+[eva:alarm] tests/value/invalid_pointer.c:20: Warning: 
   invalid pointer creation. assert \object_pointer(p - 1);
-[eva:alarm] tests/value/invalid_pointer.c:22: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:23: Warning: 
   invalid pointer creation. assert \object_pointer(p + 1);
-[eva:alarm] tests/value/invalid_pointer.c:24: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:25: Warning: 
   invalid pointer creation. assert \object_pointer(p + i);
-[eva:alarm] tests/value/invalid_pointer.c:26: Warning: 
-  invalid pointer creation. assert \object_pointer(p - j);
 [eva:alarm] tests/value/invalid_pointer.c:27: Warning: 
+  invalid pointer creation. assert \object_pointer(p - j);
+[eva:alarm] tests/value/invalid_pointer.c:28: Warning: 
   invalid pointer creation. assert \object_pointer(p - 1);
 [eva] computing for function Frama_C_interval <- pointer_computation <- main.
-  Called from tests/value/invalid_pointer.c:30.
+  Called from tests/value/invalid_pointer.c:31.
 [eva] using specification for function Frama_C_interval
-[eva] tests/value/invalid_pointer.c:30: 
+[eva] tests/value/invalid_pointer.c:31: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
-[eva:alarm] tests/value/invalid_pointer.c:31: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:32: Warning: 
   invalid pointer creation. assert \object_pointer(q + offset1);
 [eva] computing for function Frama_C_interval <- pointer_computation <- main.
-  Called from tests/value/invalid_pointer.c:32.
-[eva] tests/value/invalid_pointer.c:32: 
+  Called from tests/value/invalid_pointer.c:33.
+[eva] tests/value/invalid_pointer.c:33: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
-[eva:alarm] tests/value/invalid_pointer.c:33: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:34: Warning: 
   invalid pointer creation. assert \object_pointer(q + offset2);
 [eva] Recording results for pointer_computation
 [eva] Done for function pointer_computation
 [eva] computing for function pointer_in_loops <- main.
-  Called from tests/value/invalid_pointer.c:172.
-[eva] tests/value/invalid_pointer.c:42: 
+  Called from tests/value/invalid_pointer.c:173.
+[eva] tests/value/invalid_pointer.c:43: 
   Trace partitioning superposing up to 100 states
-[eva:alarm] tests/value/invalid_pointer.c:51: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:52: Warning: 
   invalid pointer creation. assert \object_pointer(q - 1);
 [eva] Recording results for pointer_in_loops
 [eva] Done for function pointer_in_loops
 [eva] computing for function int_conversion <- main.
-  Called from tests/value/invalid_pointer.c:173.
-[eva:alarm] tests/value/invalid_pointer.c:63: Warning: 
+  Called from tests/value/invalid_pointer.c:174.
+[eva:alarm] tests/value/invalid_pointer.c:64: Warning: 
   invalid pointer creation. assert \object_pointer((int *)42);
 [eva] computing for function Frama_C_interval <- int_conversion <- main.
-  Called from tests/value/invalid_pointer.c:65.
-[eva] tests/value/invalid_pointer.c:65: 
+  Called from tests/value/invalid_pointer.c:66.
+[eva] tests/value/invalid_pointer.c:66: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- int_conversion <- main.
-  Called from tests/value/invalid_pointer.c:67.
-[eva] tests/value/invalid_pointer.c:67: 
+  Called from tests/value/invalid_pointer.c:68.
+[eva] tests/value/invalid_pointer.c:68: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
-[eva:alarm] tests/value/invalid_pointer.c:69: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:70: Warning: 
   invalid pointer creation. assert \object_pointer((int *)x);
 [eva] computing for function Frama_C_interval <- int_conversion <- main.
-  Called from tests/value/invalid_pointer.c:71.
-[eva] tests/value/invalid_pointer.c:71: 
+  Called from tests/value/invalid_pointer.c:72.
+[eva] tests/value/invalid_pointer.c:72: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
-[eva:alarm] tests/value/invalid_pointer.c:72: Warning: 
-  invalid pointer creation. assert \object_pointer((int *)x);
 [eva:alarm] tests/value/invalid_pointer.c:73: Warning: 
+  invalid pointer creation. assert \object_pointer((int *)x);
+[eva:alarm] tests/value/invalid_pointer.c:74: Warning: 
   invalid pointer creation. assert \object_pointer((int *)undet);
 [eva] Recording results for int_conversion
 [eva] Done for function int_conversion
 [eva] computing for function addrof <- main.
-  Called from tests/value/invalid_pointer.c:174.
-[eva:alarm] tests/value/invalid_pointer.c:81: Warning: 
+  Called from tests/value/invalid_pointer.c:175.
+[eva:alarm] tests/value/invalid_pointer.c:82: Warning: 
   invalid pointer creation. assert \object_pointer(&a[11]);
-[eva:alarm] tests/value/invalid_pointer.c:83: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:84: Warning: 
   invalid pointer creation. assert \object_pointer(&a[(int)(-1)]);
-[eva:alarm] tests/value/invalid_pointer.c:85: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:86: Warning: 
   invalid pointer creation. assert \object_pointer(&a[offset]);
 [eva] Recording results for addrof
 [eva] Done for function addrof
 [eva] computing for function union_pointer <- main.
-  Called from tests/value/invalid_pointer.c:175.
-[eva:alarm] tests/value/invalid_pointer.c:101: Warning: 
+  Called from tests/value/invalid_pointer.c:176.
+[eva:alarm] tests/value/invalid_pointer.c:102: Warning: 
   invalid pointer creation. assert \object_pointer(u.pointer);
-[eva:alarm] tests/value/invalid_pointer.c:104: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:105: Warning: 
   invalid pointer creation. assert \object_pointer(u.pointer);
 [eva] Recording results for union_pointer
 [eva] Done for function union_pointer
 [eva] computing for function write_pointer <- main.
-  Called from tests/value/invalid_pointer.c:176.
-[eva:alarm] tests/value/invalid_pointer.c:114: Warning: 
+  Called from tests/value/invalid_pointer.c:177.
+[eva:alarm] tests/value/invalid_pointer.c:115: Warning: 
   invalid pointer creation. assert \object_pointer(p);
-[eva:alarm] tests/value/invalid_pointer.c:117: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:118: Warning: 
   invalid pointer creation. assert \object_pointer(p);
 [eva] Recording results for write_pointer
 [eva] Done for function write_pointer
 [eva] computing for function object_pointer_predicate <- main.
-  Called from tests/value/invalid_pointer.c:177.
-[eva] tests/value/invalid_pointer.c:126: assertion got status valid.
-[eva:alarm] tests/value/invalid_pointer.c:128: Warning: 
+  Called from tests/value/invalid_pointer.c:178.
+[eva] tests/value/invalid_pointer.c:127: assertion got status valid.
+[eva:alarm] tests/value/invalid_pointer.c:129: Warning: 
   invalid pointer creation. assert \object_pointer(p - 1);
-[eva] tests/value/invalid_pointer.c:132: assertion got status valid.
-[eva:alarm] tests/value/invalid_pointer.c:134: Warning: 
+[eva] tests/value/invalid_pointer.c:133: assertion got status valid.
+[eva:alarm] tests/value/invalid_pointer.c:135: Warning: 
   invalid pointer creation. assert \object_pointer(p + 1);
-[eva:alarm] tests/value/invalid_pointer.c:137: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:138: Warning: 
   invalid pointer creation. assert \object_pointer(p + undet);
-[eva] tests/value/invalid_pointer.c:138: assertion got status valid.
 [eva] tests/value/invalid_pointer.c:139: assertion got status valid.
-[eva] tests/value/invalid_pointer.c:140: 
+[eva] tests/value/invalid_pointer.c:140: assertion got status valid.
+[eva] tests/value/invalid_pointer.c:141: 
   Frama_C_show_each_object_pointer: {{ &x + {0; 4} }}
-[eva:alarm] tests/value/invalid_pointer.c:141: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:142: Warning: 
   invalid pointer creation.
   assert
   \object_pointer((int *)((unsigned int)((unsigned int)(&x) +
                                          (unsigned int)undet)));
-[eva] tests/value/invalid_pointer.c:142: assertion got status valid.
 [eva] tests/value/invalid_pointer.c:143: assertion got status valid.
-[eva] tests/value/invalid_pointer.c:144: 
+[eva] tests/value/invalid_pointer.c:144: assertion got status valid.
+[eva] tests/value/invalid_pointer.c:145: 
   Frama_C_show_each_object_pointer_char: {{ &x + {0; 1; 2; 3; 4} }}
 [eva] computing for function Frama_C_interval <- object_pointer_predicate <- main.
-  Called from tests/value/invalid_pointer.c:145.
-[eva] tests/value/invalid_pointer.c:145: 
+  Called from tests/value/invalid_pointer.c:146.
+[eva] tests/value/invalid_pointer.c:146: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
-[eva] tests/value/invalid_pointer.c:147: assertion got status valid.
-[eva:alarm] tests/value/invalid_pointer.c:148: Warning: 
+[eva] tests/value/invalid_pointer.c:148: assertion got status valid.
+[eva:alarm] tests/value/invalid_pointer.c:149: Warning: 
   invalid pointer creation. assert \object_pointer(p + i);
-[eva] tests/value/invalid_pointer.c:149: assertion got status valid.
-[eva:alarm] tests/value/invalid_pointer.c:150: Warning: 
+[eva] tests/value/invalid_pointer.c:150: assertion got status valid.
+[eva:alarm] tests/value/invalid_pointer.c:151: Warning: 
   invalid pointer creation. assert \object_pointer(p + undet);
-[eva] tests/value/invalid_pointer.c:151: assertion got status valid.
-[eva] tests/value/invalid_pointer.c:152: 
+[eva] tests/value/invalid_pointer.c:152: assertion got status valid.
+[eva] tests/value/invalid_pointer.c:153: 
   Frama_C_show_each_object_pointer_array:
   {{ &x + {0; 4} ; &array + [0..256],0%4 }}
-[eva] tests/value/invalid_pointer.c:154: assertion got status valid.
-[eva:alarm] tests/value/invalid_pointer.c:157: Warning: 
+[eva] tests/value/invalid_pointer.c:155: assertion got status valid.
+[eva:alarm] tests/value/invalid_pointer.c:158: Warning: 
   assertion got status unknown.
-[eva:alarm] tests/value/invalid_pointer.c:159: Warning: 
-  invalid pointer creation. assert \object_pointer((int *)50);
 [eva:alarm] tests/value/invalid_pointer.c:160: Warning: 
-  assertion got status unknown.
+  invalid pointer creation. assert \object_pointer((int *)50);
 [eva:alarm] tests/value/invalid_pointer.c:161: Warning: 
-  invalid pointer creation. assert \object_pointer((int *)undet);
+  assertion got status unknown.
 [eva:alarm] tests/value/invalid_pointer.c:162: Warning: 
+  invalid pointer creation. assert \object_pointer((int *)undet);
+[eva:alarm] tests/value/invalid_pointer.c:163: Warning: 
   assertion got status unknown.
-[eva:alarm] tests/value/invalid_pointer.c:164: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:165: Warning: 
   invalid pointer creation. assert \object_pointer((int *)100);
 [eva] Recording results for object_pointer_predicate
 [eva] Done for function object_pointer_predicate
+[eva] computing for function signal <- main.
+  Called from tests/value/invalid_pointer.c:180.
+[eva] using specification for function signal
+[eva] Done for function signal
+[eva] computing for function signal <- main.
+  Called from tests/value/invalid_pointer.c:181.
+[eva] Done for function signal
+[eva] computing for function signal <- main.
+  Called from tests/value/invalid_pointer.c:182.
+[eva] Done for function signal
 [eva] Recording results for main
 [eva] done for function main
-[eva] tests/value/invalid_pointer.c:19: 
+[eva] tests/value/invalid_pointer.c:20: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:22: 
+[eva] tests/value/invalid_pointer.c:23: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:63: 
+[eva] tests/value/invalid_pointer.c:64: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:69: 
+[eva] tests/value/invalid_pointer.c:70: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:81: 
+[eva] tests/value/invalid_pointer.c:82: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:83: 
+[eva] tests/value/invalid_pointer.c:84: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:101: 
+[eva] tests/value/invalid_pointer.c:102: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:117: 
+[eva] tests/value/invalid_pointer.c:118: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:128: 
+[eva] tests/value/invalid_pointer.c:129: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:134: 
+[eva] tests/value/invalid_pointer.c:135: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:159: 
+[eva] tests/value/invalid_pointer.c:160: 
   assertion 'Eva,pointer_value' got final status invalid.
-[eva] tests/value/invalid_pointer.c:164: 
+[eva] tests/value/invalid_pointer.c:165: 
   assertion 'Eva,pointer_value' got final status invalid.
 [scope:rm_asserts] removing 2 assertion(s)
 [eva] ====== VALUES COMPUTED ======
@@ -352,6 +362,8 @@
 [from] Computing for function write_pointer
 [from] Done for function write_pointer
 [from] Computing for function main
+[from] Computing for function signal <-main
+[from] Done for function signal
 [from] Done for function main
 [from] ====== DEPENDENCIES COMPUTED ======
   These dependencies hold at termination for the executions that terminate:
@@ -368,6 +380,8 @@
   Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF)
 [from] Function pointer_in_loops:
   NO EFFECTS
+[from] Function signal:
+  \result FROM ANYTHING(origin:Unknown)
 [from] Function union_pointer:
   NO EFFECTS
 [from] Function write_pointer:
@@ -406,4 +420,4 @@
 [inout] Out (internal) for function main:
     Frama_C_entropy_source
 [inout] Inputs for function main:
-    Frama_C_entropy_source; undet
+    Frama_C_entropy_source; SIG_DFL; SIG_IGN; SIG_ERR; undet
diff --git a/tests/value/oracle/invalid_pointer.1.res.oracle b/tests/value/oracle/invalid_pointer.1.res.oracle
index ccb4096a72d..f8121ed36eb 100644
--- a/tests/value/oracle/invalid_pointer.1.res.oracle
+++ b/tests/value/oracle/invalid_pointer.1.res.oracle
@@ -1,5 +1,5 @@
 [kernel] Parsing tests/value/invalid_pointer.c (with preprocessing)
-[kernel:typing:int-conversion] tests/value/invalid_pointer.c:111: Warning: 
+[kernel:typing:int-conversion] tests/value/invalid_pointer.c:112: Warning: 
   Conversion from a pointer to an integer without an explicit cast
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
@@ -8,101 +8,111 @@
   NULL[rbits 80 to 247] ∈ [--..--]
   undet ∈ [--..--]
 [eva] computing for function pointer_computation <- main.
-  Called from tests/value/invalid_pointer.c:171.
+  Called from tests/value/invalid_pointer.c:172.
 [eva] computing for function Frama_C_interval <- pointer_computation <- main.
-  Called from tests/value/invalid_pointer.c:30.
+  Called from tests/value/invalid_pointer.c:31.
 [eva] using specification for function Frama_C_interval
-[eva] tests/value/invalid_pointer.c:30: 
+[eva] tests/value/invalid_pointer.c:31: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- pointer_computation <- main.
-  Called from tests/value/invalid_pointer.c:32.
-[eva] tests/value/invalid_pointer.c:32: 
+  Called from tests/value/invalid_pointer.c:33.
+[eva] tests/value/invalid_pointer.c:33: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for pointer_computation
 [eva] Done for function pointer_computation
 [eva] computing for function pointer_in_loops <- main.
-  Called from tests/value/invalid_pointer.c:172.
-[eva] tests/value/invalid_pointer.c:42: 
+  Called from tests/value/invalid_pointer.c:173.
+[eva] tests/value/invalid_pointer.c:43: 
   Trace partitioning superposing up to 100 states
-[eva] tests/value/invalid_pointer.c:53: 
+[eva] tests/value/invalid_pointer.c:54: 
   Frama_C_show_each_bottom: {{ &t + {-4} }}
 [eva] Recording results for pointer_in_loops
 [eva] Done for function pointer_in_loops
 [eva] computing for function int_conversion <- main.
-  Called from tests/value/invalid_pointer.c:173.
+  Called from tests/value/invalid_pointer.c:174.
 [eva] computing for function Frama_C_interval <- int_conversion <- main.
-  Called from tests/value/invalid_pointer.c:65.
-[eva] tests/value/invalid_pointer.c:65: 
+  Called from tests/value/invalid_pointer.c:66.
+[eva] tests/value/invalid_pointer.c:66: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- int_conversion <- main.
-  Called from tests/value/invalid_pointer.c:67.
-[eva] tests/value/invalid_pointer.c:67: 
+  Called from tests/value/invalid_pointer.c:68.
+[eva] tests/value/invalid_pointer.c:68: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- int_conversion <- main.
-  Called from tests/value/invalid_pointer.c:71.
-[eva] tests/value/invalid_pointer.c:71: 
+  Called from tests/value/invalid_pointer.c:72.
+[eva] tests/value/invalid_pointer.c:72: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for int_conversion
 [eva] Done for function int_conversion
 [eva] computing for function addrof <- main.
-  Called from tests/value/invalid_pointer.c:174.
+  Called from tests/value/invalid_pointer.c:175.
 [eva] Recording results for addrof
 [eva] Done for function addrof
 [eva] computing for function union_pointer <- main.
-  Called from tests/value/invalid_pointer.c:175.
+  Called from tests/value/invalid_pointer.c:176.
 [eva] Recording results for union_pointer
 [eva] Done for function union_pointer
 [eva] computing for function write_pointer <- main.
-  Called from tests/value/invalid_pointer.c:176.
+  Called from tests/value/invalid_pointer.c:177.
 [eva] Recording results for write_pointer
 [eva] Done for function write_pointer
 [eva] computing for function object_pointer_predicate <- main.
-  Called from tests/value/invalid_pointer.c:177.
-[eva] tests/value/invalid_pointer.c:126: assertion got status valid.
-[eva:alarm] tests/value/invalid_pointer.c:129: Warning: 
+  Called from tests/value/invalid_pointer.c:178.
+[eva] tests/value/invalid_pointer.c:127: assertion got status valid.
+[eva:alarm] tests/value/invalid_pointer.c:130: Warning: 
   assertion got status invalid (stopping propagation).
-[eva] tests/value/invalid_pointer.c:132: assertion got status valid.
-[eva:alarm] tests/value/invalid_pointer.c:135: Warning: 
+[eva] tests/value/invalid_pointer.c:133: assertion got status valid.
+[eva:alarm] tests/value/invalid_pointer.c:136: Warning: 
   assertion got status invalid (stopping propagation).
-[eva:alarm] tests/value/invalid_pointer.c:138: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:139: Warning: 
   assertion got status unknown.
-[eva] tests/value/invalid_pointer.c:139: assertion got status valid.
-[eva] tests/value/invalid_pointer.c:140: 
+[eva] tests/value/invalid_pointer.c:140: assertion got status valid.
+[eva] tests/value/invalid_pointer.c:141: 
   Frama_C_show_each_object_pointer: {{ &x + {0; 4} }}
-[eva:alarm] tests/value/invalid_pointer.c:142: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:143: Warning: 
   assertion got status unknown.
-[eva] tests/value/invalid_pointer.c:143: assertion got status valid.
-[eva] tests/value/invalid_pointer.c:144: 
+[eva] tests/value/invalid_pointer.c:144: assertion got status valid.
+[eva] tests/value/invalid_pointer.c:145: 
   Frama_C_show_each_object_pointer_char: {{ &x + {0; 1; 2; 3; 4} }}
 [eva] computing for function Frama_C_interval <- object_pointer_predicate <- main.
-  Called from tests/value/invalid_pointer.c:145.
-[eva] tests/value/invalid_pointer.c:145: 
+  Called from tests/value/invalid_pointer.c:146.
+[eva] tests/value/invalid_pointer.c:146: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
-[eva] tests/value/invalid_pointer.c:147: assertion got status valid.
-[eva:alarm] tests/value/invalid_pointer.c:149: Warning: 
+[eva] tests/value/invalid_pointer.c:148: assertion got status valid.
+[eva:alarm] tests/value/invalid_pointer.c:150: Warning: 
   assertion got status unknown.
-[eva:alarm] tests/value/invalid_pointer.c:151: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:152: Warning: 
   assertion got status unknown.
-[eva] tests/value/invalid_pointer.c:152: 
+[eva] tests/value/invalid_pointer.c:153: 
   Frama_C_show_each_object_pointer_array:
   {{ &x + {0; 4} ; &array + [0..256],0%4 }}
-[eva] tests/value/invalid_pointer.c:154: assertion got status valid.
-[eva:alarm] tests/value/invalid_pointer.c:157: Warning: 
+[eva] tests/value/invalid_pointer.c:155: assertion got status valid.
+[eva:alarm] tests/value/invalid_pointer.c:158: Warning: 
   assertion got status unknown.
-[eva:alarm] tests/value/invalid_pointer.c:160: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:161: Warning: 
   assertion got status unknown.
-[eva:alarm] tests/value/invalid_pointer.c:162: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:163: Warning: 
   assertion got status unknown.
-[eva:alarm] tests/value/invalid_pointer.c:165: Warning: 
+[eva:alarm] tests/value/invalid_pointer.c:166: Warning: 
   assertion got status invalid (stopping propagation).
 [eva] Recording results for object_pointer_predicate
 [eva] Done for function object_pointer_predicate
+[eva] computing for function signal <- main.
+  Called from tests/value/invalid_pointer.c:180.
+[eva] using specification for function signal
+[eva] Done for function signal
+[eva] computing for function signal <- main.
+  Called from tests/value/invalid_pointer.c:181.
+[eva] Done for function signal
+[eva] computing for function signal <- main.
+  Called from tests/value/invalid_pointer.c:182.
+[eva] Done for function signal
 [eva] Recording results for main
 [eva] done for function main
 [scope:rm_asserts] removing 2 assertion(s)
@@ -280,6 +290,8 @@
 [from] Computing for function write_pointer
 [from] Done for function write_pointer
 [from] Computing for function main
+[from] Computing for function signal <-main
+[from] Done for function signal
 [from] Done for function main
 [from] ====== DEPENDENCIES COMPUTED ======
   These dependencies hold at termination for the executions that terminate:
@@ -296,6 +308,8 @@
   Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF)
 [from] Function pointer_in_loops:
   NO EFFECTS
+[from] Function signal:
+  \result FROM ANYTHING(origin:Unknown)
 [from] Function union_pointer:
   NO EFFECTS
 [from] Function write_pointer:
@@ -334,4 +348,4 @@
 [inout] Out (internal) for function main:
     Frama_C_entropy_source
 [inout] Inputs for function main:
-    Frama_C_entropy_source; undet
+    Frama_C_entropy_source; SIG_DFL; SIG_IGN; SIG_ERR; undet
-- 
GitLab