From 29c865bce43ab2844159308e9b6e8aba899e7953 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Mon, 4 Apr 2022 09:24:29 +0200
Subject: [PATCH] [Eva] Exports [condition_truth_value] in the new Eva API.

Uses it in other plugins, instead of Db.Value.
---
 src/plugins/pdg/build.ml                | 2 +-
 src/plugins/postdominators/compute.ml   | 3 +--
 src/plugins/slicing/slicingTransform.ml | 2 +-
 src/plugins/sparecode/transform.ml      | 2 +-
 src/plugins/value/utils/results.ml      | 1 +
 src/plugins/value/utils/results.mli     | 4 ++++
 6 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/plugins/pdg/build.ml b/src/plugins/pdg/build.ml
index 4c2bd6202f7..39b5d236544 100644
--- a/src/plugins/pdg/build.ml
+++ b/src/plugins/pdg/build.ml
@@ -765,7 +765,7 @@ let process_condition ctrl_dpds_infos pdg state stmt condition =
   let decls_cond = Cil.extract_varinfos_from_exp condition in
 
   let controlled_stmts = CtrlDpds.get_if_controlled_stmts ctrl_dpds_infos stmt in
-  let go_then, go_else = Db.Value.condition_truth_value stmt in
+  let go_then, go_else = Eva.Results.condition_truth_value stmt in
   let real = go_then && go_else (* real dpd if we can go in both branches *) in
   if not real then
     debug
diff --git a/src/plugins/postdominators/compute.ml b/src/plugins/postdominators/compute.ml
index d39e990b9dc..8126dda2609 100644
--- a/src/plugins/postdominators/compute.ml
+++ b/src/plugins/postdominators/compute.ml
@@ -258,8 +258,7 @@ include
       let is_accessible = Eva.Results.is_reachable
       let dependencies = [ Eva.Analysis.self ]
       let name = "value"
-      let eval_cond stmt _e =
-        Db.Value.condition_truth_value stmt
+      let eval_cond stmt _e = Eva.Results.condition_truth_value stmt
     end)
     (Db.PostdominatorsValue)
 
diff --git a/src/plugins/slicing/slicingTransform.ml b/src/plugins/slicing/slicingTransform.ml
index 8fe9a26d5b6..da5c14f22b2 100644
--- a/src/plugins/slicing/slicingTransform.ml
+++ b/src/plugins/slicing/slicingTransform.ml
@@ -449,7 +449,7 @@ module Visibility (SliceName : sig
     info
 
   let cond_edge_visible _ff_opt s =
-    Db.Value.condition_truth_value s
+    Eva.Results.condition_truth_value s
 
 end
 
diff --git a/src/plugins/sparecode/transform.ml b/src/plugins/sparecode/transform.ml
index dd67f768493..e2280ec81b2 100644
--- a/src/plugins/sparecode/transform.ml
+++ b/src/plugins/sparecode/transform.ml
@@ -155,7 +155,7 @@ module BoolInfo = struct
     with Kernel_function.No_Statement -> true
 
   let cond_edge_visible _ s =
-    Db.Value.condition_truth_value s
+    Eva.Results.condition_truth_value s
 end
 
 module Info = Filter.F (BoolInfo)
diff --git a/src/plugins/value/utils/results.ml b/src/plugins/value/utils/results.ml
index 34883ace8ad..6e92b4373d7 100644
--- a/src/plugins/value/utils/results.ml
+++ b/src/plugins/value/utils/results.ml
@@ -682,6 +682,7 @@ let is_reachable_kinstr kinstr =
   let module M = Make () in
   M.is_reachable (before_kinstr kinstr)
 
+let condition_truth_value = Db.Value.condition_truth_value
 
 (* Callers / callsites *)
 
diff --git a/src/plugins/value/utils/results.mli b/src/plugins/value/utils/results.mli
index a14dd721dea..a35f29f8d30 100644
--- a/src/plugins/value/utils/results.mli
+++ b/src/plugins/value/utils/results.mli
@@ -275,6 +275,10 @@ val is_reachable : Cil_types.stmt -> bool
     the main function has been analyzed for [Kglobal]. *)
 val is_reachable_kinstr : Cil_types.kinstr -> bool
 
+val condition_truth_value: Cil_types.stmt -> bool * bool
+(** Provided [stmt] is an 'if' construct, [fst (condition_truth_value stmt)]
+    (resp. snd) is true if and only if the condition of the 'if' has been
+    evaluated to true (resp. false) at least once during the analysis. *)
 
 (*** Callers / Callees / Callsites *)
 
-- 
GitLab