From f9a139c84b6dfccb73a642d05d43ad61c81e4c8d Mon Sep 17 00:00:00 2001 From: Valentin Perrelle <valentin.perrelle@cea.fr> Date: Tue, 8 Feb 2022 21:04:57 +0100 Subject: [PATCH] [Eva] api: separate lval_deps and address_deps --- src/plugins/value/Eva.mli | 5 +++-- src/plugins/value/register.mli | 7 +++---- src/plugins/value/utils/results.ml | 12 ++++++++++++ src/plugins/value/utils/results.mli | 5 +++-- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/plugins/value/Eva.mli b/src/plugins/value/Eva.mli index dd7a35736d2..7872eb90937 100644 --- a/src/plugins/value/Eva.mli +++ b/src/plugins/value/Eva.mli @@ -70,8 +70,9 @@ module Results: sig val as_cvalue_model : request -> Cvalue.Model.t result (* Dependencies *) - val expr_deps : Cil_types.exp -> request -> Locations.Zone.t - val lval_deps : Cil_types.lval -> request -> Locations.Zone.t + val expr_deps : Cil_types.exp -> request -> Locations.Zone.t (* The zone of bits read to evaluate the expression, including adresses computation *) + val lval_deps : Cil_types.lval -> request -> Locations.Zone.t (* The zone of bits read to evaluate the lvalue, including lvalue zone itself *) + val address_deps : Cil_types.lval -> request -> Locations.Zone.t (* The zone of bits read to evaluate the lvalue, excluding the lvalue zone itself *) (* Evaluation *) val eval_var : Cil_types.varinfo -> request -> value evaluation diff --git a/src/plugins/value/register.mli b/src/plugins/value/register.mli index c0758d9b6fc..8dd1c29c58b 100644 --- a/src/plugins/value/register.mli +++ b/src/plugins/value/register.mli @@ -23,7 +23,6 @@ (** Functions of the Value plugin registered in {!Db}. Only two functions are exported. *) -val eval_deps : Cvalue.Model.t * Locals_scoping.clobbered_set -> - Cil_types.exp -> Locations.Zone.t -val eval_deps_lval : Cvalue.Model.t * Locals_scoping.clobbered_set -> - Cil_types.lval -> Locations.Zone.t +val eval_deps : Cvalue_domain.State.t -> Cil_types.exp -> Locations.Zone.t +val eval_deps_lval : Cvalue_domain.State.t -> Cil_types.lval -> Locations.Zone.t +val eval_deps_addr : Cvalue_domain.State.t -> Cil_types.lval -> Locations.Zone.t diff --git a/src/plugins/value/utils/results.ml b/src/plugins/value/utils/results.ml index 0e045ae21ec..00bdb7712ad 100644 --- a/src/plugins/value/utils/results.ml +++ b/src/plugins/value/utils/results.ml @@ -511,6 +511,14 @@ struct in req |> as_cvalue_model |> Result.fold ~error:(fun _ -> Locations.Zone.bottom) ~ok:compute_deps + + let address_deps lval req = + let compute_deps cvalue = + Register.eval_deps_addr (cvalue, Locals_scoping.bottom ()) lval + in + req |> as_cvalue_model |> + Result.fold ~error:(fun _ -> Locations.Zone.bottom) ~ok:compute_deps + end @@ -554,6 +562,10 @@ let lval_deps lval req = let module E = Make () in E.lval_deps lval req +let address_deps lval req = + let module E = Make () in + E.address_deps lval req + (* Evaluation *) diff --git a/src/plugins/value/utils/results.mli b/src/plugins/value/utils/results.mli index 6db2025dfb7..d4030ff471d 100644 --- a/src/plugins/value/utils/results.mli +++ b/src/plugins/value/utils/results.mli @@ -72,8 +72,9 @@ val equality_class : Cil_types.exp -> request -> Cil_types.exp list result val as_cvalue_model : request -> Cvalue.Model.t result (* Dependencies *) -val expr_deps : Cil_types.exp -> request -> Locations.Zone.t -val lval_deps : Cil_types.lval -> request -> Locations.Zone.t +val expr_deps : Cil_types.exp -> request -> Locations.Zone.t (* The zone of bits read to evaluate the expression, including adresses computation *) +val lval_deps : Cil_types.lval -> request -> Locations.Zone.t (* The zone of bits read to evaluate the lvalue, including lvalue zone itself *) +val address_deps : Cil_types.lval -> request -> Locations.Zone.t (* The zone of bits read to evaluate the lvalue, excluding the lvalue zone itself *) (* Evaluation *) val eval_var : Cil_types.varinfo -> request -> value evaluation -- GitLab