ApronDomain.BoxProd0Lift D to a non-reduced product with box. Both are updated in parallel, but D answers to queries. Box domain is used to filter out non-relational invariants for output.
module BoxD : sig ... endinclude sig ... endval hash : ('a * D.t) -> intval is_top : ('a * D.t) -> boolval is_bot : ('a * D.t) -> boolval top_env : GobApron.Environment.t -> BoxD.Man.mt A.t * D.tval bot_env : GobApron.Environment.t -> BoxD.Man.mt A.t * D.tval is_top_env : ('a * D.t) -> boolval is_bot_env : ('a * D.t) -> booltype marshal = BoxD.marshal * D.marshalval marshal : (BoxD.t * D.t) -> BoxD.marshal * D.marshalval unmarshal : (BoxD.marshal * D.marshal) -> BoxD.t * D.tval mem_var : ('a * D.t) -> GobApron.Var.t -> boolval vars : ('a * D.t) -> GobApron.Var.t listval add_vars_with : (BoxD.Man.mt A.t * D.t) -> GobApron.Var.t list -> unitval remove_vars_with : (BoxD.t * D.t) -> GobApron.Var.t list -> unitval remove_filter_with : (BoxD.t * D.t) -> (GobApron.Var.t -> bool) -> unitval keep_filter_with :
(BoxD.Man.mt A.t * D.t) ->
(GobApron.Var.t -> bool) ->
unitval keep_vars_with : (BoxD.Man.mt A.t * D.t) -> GobApron.Var.t list -> unitval forget_vars_with : (BoxD.Man.mt A.t * D.t) -> GobApron.Var.t list -> unitval assign_exp_with :
Queries.ask ->
(BoxD.Bounds.t * D.t) ->
GobApron.Var.t ->
GoblintCil.Cil.exp ->
bool Stdlib.Lazy.t ->
unitval assign_exp_parallel_with :
Queries.ask ->
(BoxD.Man.mt A.t * D.t) ->
(GobApron.Var.t * GoblintCil.exp) list ->
bool ->
unitval assign_var_with :
(BoxD.Man.mt A.t * D.t) ->
GobApron.Var.t ->
GobApron.Var.t ->
unitval assign_var_parallel_with :
(BoxD.t * D.t) ->
(GobApron.Var.t * GobApron.Var.t) list ->
unitval assign_var_parallel' :
(BoxD.t * D.t) ->
GobApron.Var.t list ->
GobApron.Var.t list ->
BoxD.t * D.tval substitute_exp_with :
Queries.ask ->
(BoxD.Bounds.t * D.t) ->
GobApron.Var.t ->
GoblintCil.Cil.exp ->
bool Stdlib.Lazy.t ->
unitval substitute_exp_parallel_with :
Queries.ask ->
(BoxD.Man.mt A.t * D.t) ->
(GobApron.Var.t * GoblintCil.exp) list ->
bool Stdlib.Lazy.t ->
unitval substitute_var_with :
(BoxD.Man.mt A.t * D.t) ->
GobApron.Var.t ->
GobApron.Var.t ->
unitval meet_tcons :
Queries.ask ->
(BoxD.Man.mt A.t * D.t) ->
GobApron.Tcons1.t ->
GoblintCil.exp ->
BoxD.Man.mt A.t * D.tval to_lincons_array : ('a * D.t) -> GobApron.Lincons1.earrayval of_lincons_array : GobApron.Lincons1.earray -> BoxD.Man.mt A.t * D.tval cil_exp_of_lincons1 : GobApron.Lincons1.t -> GoblintCil.exp optionval assert_inv :
Queries.ask ->
(BoxD.t * D.t) ->
GoblintCil.exp ->
bool ->
bool Stdlib.Lazy.t ->
BoxD.t * D.tval eval_int :
Queries.ask ->
('a * D.t) ->
GoblintCil.exp ->
bool Stdlib.Lazy.t ->
ValueDomainQueries.ID.tval invariant : (BoxD.Man.mt A.t * D.t) -> GobApron.Lincons1Set.elt list