From 9f38e57287d29090d7e43b4a9fbba3cbd263e5c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Fri, 24 Mar 2023 21:58:56 +0100
Subject: [PATCH] [Eva] In Ivette, fixes the value of function parameters in
 the Inspector panel.

Function parameters were wrongly evaluated in the initial state of the
analysis instead of the initial state of the given function.
---
 src/plugins/eva/api/general_requests.ml | 28 ++++++++++++++++---------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/plugins/eva/api/general_requests.ml b/src/plugins/eva/api/general_requests.ml
index 3c75a902025..c0a00d85c44 100644
--- a/src/plugins/eva/api/general_requests.ml
+++ b/src/plugins/eva/api/general_requests.ml
@@ -189,22 +189,30 @@ let term_lval_to_lval tlval =
 
 let print_value fmt loc =
   let is_scalar = Cil.isScalarType in
-  let kinstr, eval =
+  let kf, kinstr, eval =
     match loc with
-    | Printer_tag.PLval (_kf, ki, lval) when is_scalar (Cil.typeOfLval lval) ->
-      ki, Results.eval_lval lval
-    | Printer_tag.PExp (_kf, ki, expr) when is_scalar (Cil.typeOf expr) ->
-      ki, Results.eval_exp expr
-    | PVDecl (_kf, ki, vi) when is_scalar vi.vtype ->
-      ki, Results.eval_var vi
-    | PTermLval (_kf, ki, _ip, tlval) ->
+    | Printer_tag.PLval (kf, ki, lval) when is_scalar (Cil.typeOfLval lval) ->
+      kf, ki, Results.eval_lval lval
+    | Printer_tag.PExp (kf, ki, expr) when is_scalar (Cil.typeOf expr) ->
+      kf, ki, Results.eval_exp expr
+    | PVDecl (kf, ki, vi) when is_scalar vi.vtype ->
+      kf, ki, Results.eval_var vi
+    | PTermLval (kf, ki, _ip, tlval) ->
       let lval = term_lval_to_lval tlval in
-      ki, Results.eval_lval lval
+      if is_scalar (Cil.typeOfLval lval)
+      then kf, ki, Results.eval_lval lval
+      else raise Not_found
     | _ -> raise Not_found
   in
   let pretty = Cvalue.V_Or_Uninitialized.pretty in
   let eval_cvalue at = Results.(eval at |> as_cvalue_or_uninitialized) in
-  let before = eval_cvalue (Results.before_kinstr kinstr) in
+  let request =
+    match kf, kinstr with
+    | _, Kstmt stmt -> Results.before stmt
+    | Some kf, Kglobal -> Results.at_start_of kf
+    | None, Kglobal -> Results.at_start
+  in
+  let before = eval_cvalue request in
   match kinstr with
   | Kglobal -> pretty fmt before
   | Kstmt stmt ->
-- 
GitLab