From 66a6668ae70d02b44426492629b985bedde653f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr> Date: Tue, 28 May 2024 19:13:54 +0200 Subject: [PATCH] [Eva] Domain_builder.Complete functor builds unit context for domains. Removes NoContext from domain_builder. Removes Context argument from other Complete_* functors: they all build a unit context. --- src/plugins/eva/domains/apron/apron_domain.ml | 1 - .../eva/domains/cvalue/cvalue_domain.ml | 5 +++- src/plugins/eva/domains/domain_builder.ml | 23 ++++++------------- src/plugins/eva/domains/domain_builder.mli | 16 +++++-------- .../eva/domains/gauges/gauges_domain.ml | 1 - src/plugins/eva/domains/inout_domain.ml | 1 - .../eva/domains/multidim/multidim_domain.ml | 1 - src/plugins/eva/domains/octagons.ml | 1 - src/plugins/eva/domains/offsm_domain.ml | 1 - src/plugins/eva/domains/simple_memory.ml | 1 - src/plugins/eva/domains/symbolic_locs.ml | 1 - src/plugins/eva/domains/taint_domain.ml | 1 - src/plugins/eva/domains/traces_domain.ml | 1 - src/plugins/eva/domains/unit_domain.ml | 1 - 14 files changed, 17 insertions(+), 38 deletions(-) diff --git a/src/plugins/eva/domains/apron/apron_domain.ml b/src/plugins/eva/domains/apron/apron_domain.ml index 691980d0ed5..ec320503fdf 100644 --- a/src/plugins/eva/domains/apron/apron_domain.ml +++ b/src/plugins/eva/domains/apron/apron_domain.ml @@ -428,7 +428,6 @@ module Make (Man : Input) = struct let s = Abstract1.meet man s1 s2 in if Abstract1.is_bottom man s then `Bottom else `Value s - include Domain_builder.No_context include Domain_builder.Complete (struct include D diff --git a/src/plugins/eva/domains/cvalue/cvalue_domain.ml b/src/plugins/eva/domains/cvalue/cvalue_domain.ml index 888a0d0cafe..1fd21a94a0c 100644 --- a/src/plugins/eva/domains/cvalue/cvalue_domain.ml +++ b/src/plugins/eva/domains/cvalue/cvalue_domain.ml @@ -32,7 +32,10 @@ module State = struct let value_dependencies = Main_values.cval let location_dependencies = Main_locations.ploc - include Domain_builder.No_context + + type context = unit + let context_dependencies = Abstract_context.Leaf (module Unit_context) + let return_context _ = `Value () let log_category = Self.dkey_cvalue_domain diff --git a/src/plugins/eva/domains/domain_builder.ml b/src/plugins/eva/domains/domain_builder.ml index c67308531fe..c7324a89dbc 100644 --- a/src/plugins/eva/domains/domain_builder.ml +++ b/src/plugins/eva/domains/domain_builder.ml @@ -36,6 +36,10 @@ end module type LeafDomain = sig type t + type context = unit + val context_dependencies: context Abstract_context.dependencies + val return_context: t -> context or_bottom + val backward_location: t -> lval -> typ -> 'loc -> 'v -> ('loc * 'v) or_bottom val reduce_further: t -> exp -> 'v -> (exp * 'v) list @@ -66,16 +70,11 @@ module type LeafDomain = sig end +module Complete (Domain: InputDomain) = struct -module No_context = struct type context = unit let context_dependencies = Abstract_context.Leaf (module Unit_context) let return_context _ = `Value () -end - - - -module Complete (Domain: InputDomain) = struct let backward_location _state _lval _typ loc value = `Value (loc, value) let reduce_further _state _expr _value = [] @@ -119,7 +118,6 @@ let simplify_call call = module Make_Minimal - (Context : Abstract_context.Leaf) (Value: Abstract_value.Leaf) (Location: Abstract_location.Leaf) (Domain: Simpler_domains.Minimal) @@ -129,14 +127,11 @@ module Make_Minimal let log_category = Self.register_category ("d-" ^ name) - type context = Context.t type value = Value.t type location = Location.location type state = Domain.t type origin - let return_context _ = `Value Context.top - let context_dependencies = Abstract_context.Leaf (module Context) let value_dependencies = Abstract_value.Leaf (module Value) let location_dependencies = Abstract_location.Leaf (module Location) @@ -181,14 +176,13 @@ end module Complete_Minimal - (Context : Abstract_context.Leaf) (Value: Abstract_value.Leaf) (Location: Abstract_location.Leaf) (Domain: Simpler_domains.Minimal) = struct module D = struct - include Make_Minimal (Context) (Value) (Location) (Domain) + include Make_Minimal (Value) (Location) (Domain) include (Datatype.Make_with_collections @@ -213,7 +207,6 @@ end module Complete_Minimal_with_datatype - (Context : Abstract_context.Leaf) (Value: Abstract_value.Leaf) (Location: Abstract_location.Leaf) (Domain: Minimal_with_datatype) @@ -221,7 +214,7 @@ module Complete_Minimal_with_datatype module D = struct - include Make_Minimal (Context) (Value) (Location) (Domain) + include Make_Minimal (Value) (Location) (Domain) include (Datatype.With_collections @@ -254,8 +247,6 @@ module Complete_Simple_Cvalue (Domain: Simpler_domains.Simple_Cvalue) type state = Domain.t type origin - include No_context - let value_dependencies = Abstract_value.Leaf (module Main_values.CVal) let location_dependencies = Abstract_location.Leaf (module Main_locations.PLoc) diff --git a/src/plugins/eva/domains/domain_builder.mli b/src/plugins/eva/domains/domain_builder.mli index 568c5509ec2..7f24bb4a8c9 100644 --- a/src/plugins/eva/domains/domain_builder.mli +++ b/src/plugins/eva/domains/domain_builder.mli @@ -40,6 +40,10 @@ end module type LeafDomain = sig type t + type context = unit + val context_dependencies: context Abstract_context.dependencies + val return_context: t -> context or_bottom + val backward_location: t -> lval -> typ -> 'loc -> 'v -> ('loc * 'v) or_bottom val reduce_further: t -> exp -> 'v -> (exp * 'v) list @@ -69,31 +73,23 @@ module type LeafDomain = sig val key: t Abstract_domain.key end -module No_context : sig - type context = unit - val context_dependencies : context Abstract_context.dependencies - val return_context : 'a -> context Eval.or_bottom -end - (** Automatically builds some functions of an abstract domain. *) module Complete (Domain: InputDomain) : LeafDomain with type t := Domain.t module Complete_Minimal - (Context : Abstract_context.Leaf) (Value: Abstract_value.Leaf) (Location: Abstract_location.Leaf) (Domain: Simpler_domains.Minimal) - : Abstract_domain.Leaf with type context = Context.t + : Abstract_domain.Leaf with type context = unit and type value = Value.t and type location = Location.location and type state = Domain.t module Complete_Minimal_with_datatype - (Context : Abstract_context.Leaf) (Value: Abstract_value.Leaf) (Location: Abstract_location.Leaf) (Domain: Simpler_domains.Minimal_with_datatype) - : Abstract_domain.Leaf with type context = Context.t + : Abstract_domain.Leaf with type context = unit and type value = Value.t and type location = Location.location and type state = Domain.t diff --git a/src/plugins/eva/domains/gauges/gauges_domain.ml b/src/plugins/eva/domains/gauges/gauges_domain.ml index a1e82cd863a..4fc078eb9d2 100644 --- a/src/plugins/eva/domains/gauges/gauges_domain.ml +++ b/src/plugins/eva/domains/gauges/gauges_domain.ml @@ -1125,7 +1125,6 @@ module D : Abstract_domain.Leaf include G include Domain_builder.Complete (struct include G let top = empty end) - include Domain_builder.No_context let log_category = dkey diff --git a/src/plugins/eva/domains/inout_domain.ml b/src/plugins/eva/domains/inout_domain.ml index 728c892b7d4..db4680480a4 100644 --- a/src/plugins/eva/domains/inout_domain.ml +++ b/src/plugins/eva/domains/inout_domain.ml @@ -220,7 +220,6 @@ module Domain = struct end) include Domain_builder.Complete (LatticeInout) - include Domain_builder.No_context let log_category = Self.register_category "d-inout" diff --git a/src/plugins/eva/domains/multidim/multidim_domain.ml b/src/plugins/eva/domains/multidim/multidim_domain.ml index 92f546a13bf..c34c84acc99 100644 --- a/src/plugins/eva/domains/multidim/multidim_domain.ml +++ b/src/plugins/eva/domains/multidim/multidim_domain.ml @@ -664,7 +664,6 @@ module Domain = struct include DomainLattice include Domain_builder.Complete (DomainLattice) - include Domain_builder.No_context (* Eva Queries *) diff --git a/src/plugins/eva/domains/octagons.ml b/src/plugins/eva/domains/octagons.ml index eab6d98444a..33be2920a29 100644 --- a/src/plugins/eva/domains/octagons.ml +++ b/src/plugins/eva/domains/octagons.ml @@ -1600,7 +1600,6 @@ module Domain = struct include State include Domain_builder.Complete (State) - include Domain_builder.No_context type value = Cvalue.V.t type location = Precise_locs.precise_location diff --git a/src/plugins/eva/domains/offsm_domain.ml b/src/plugins/eva/domains/offsm_domain.ml index 652cca15035..806d306d6f7 100644 --- a/src/plugins/eva/domains/offsm_domain.ml +++ b/src/plugins/eva/domains/offsm_domain.ml @@ -110,7 +110,6 @@ module D : Abstract_domain.Leaf end) include Domain_builder.Complete (Memory) - include Domain_builder.No_context let log_category = dkey diff --git a/src/plugins/eva/domains/simple_memory.ml b/src/plugins/eva/domains/simple_memory.ml index d0356313438..d2c81be458b 100644 --- a/src/plugins/eva/domains/simple_memory.ml +++ b/src/plugins/eva/domains/simple_memory.ml @@ -188,7 +188,6 @@ module Make_Domain (Info: sig val name: string end) (Value: Value) = struct include M include Domain_builder.Complete (M) - include Domain_builder.No_context type state = t type value = Value.t diff --git a/src/plugins/eva/domains/symbolic_locs.ml b/src/plugins/eva/domains/symbolic_locs.ml index 1a5ebf09887..0719ce81c89 100644 --- a/src/plugins/eva/domains/symbolic_locs.ml +++ b/src/plugins/eva/domains/symbolic_locs.ml @@ -472,7 +472,6 @@ module D : Abstract_domain.Leaf end) include Domain_builder.Complete (Memory) - include Domain_builder.No_context let log_category = dkey diff --git a/src/plugins/eva/domains/taint_domain.ml b/src/plugins/eva/domains/taint_domain.ml index e0b0d4f3c07..d20a13adf8a 100644 --- a/src/plugins/eva/domains/taint_domain.ml +++ b/src/plugins/eva/domains/taint_domain.ml @@ -310,7 +310,6 @@ module Domain = struct end) include Domain_builder.Complete (LatticeTaint) - include Domain_builder.No_context include QueriesTaint diff --git a/src/plugins/eva/domains/traces_domain.ml b/src/plugins/eva/domains/traces_domain.ml index d631c13e358..53eb03a0032 100644 --- a/src/plugins/eva/domains/traces_domain.ml +++ b/src/plugins/eva/domains/traces_domain.ml @@ -1089,7 +1089,6 @@ module D = struct type location = Precise_locs.precise_location type origin - include Domain_builder.No_context let value_dependencies = Main_values.cval let location_dependencies = Main_locations.ploc diff --git a/src/plugins/eva/domains/unit_domain.ml b/src/plugins/eva/domains/unit_domain.ml index 378f0437b30..0d05955f190 100644 --- a/src/plugins/eva/domains/unit_domain.ml +++ b/src/plugins/eva/domains/unit_domain.ml @@ -25,7 +25,6 @@ let log_key = Self.register_category "unit-domain" module Static = struct module D = struct include Datatype.Unit - include Domain_builder.No_context type state = t let name = "unit" -- GitLab