Frama-C API - Simple_Cvalue
A simple interface allowing the abstract domain to use the value and location abstractions computed by the other domains. Only the Cvalue.V and the the Precise_locs abstractions are available in this interface, on the transfer functions for assignment, assumption and at the call sites. On the other hand, the abstract domain cannot assist the computation of these value and location abstractions. The communication is thus unidirectional, from other domains to these simpler domains.
include Frama_c_kernel.Datatype.S
include Frama_c_kernel.Datatype.S_no_copy
val datatype_descr : t Frama_c_kernel.Descr.tDatatype descriptor.
val packed_descr : Frama_c_kernel.Structural_descr.packPacked version of the descriptor.
val reprs : t listList of representants of the descriptor.
val hash : t -> intHash function: same spec than Hashtbl.hash.
val pretty : Stdlib.Format.formatter -> t -> unitPretty print each value in an user-friendly way.
val mem_project : (Frama_c_kernel.Project_skeleton.t -> bool) -> t -> boolmem_project f x must return true iff there is a value p of type Project.t in x such that f p returns true.
Lattice structure.
val top : tval widen : Frama_c_kernel.Cil_types.kernel_function -> Frama_c_kernel.Cil_types.stmt -> t -> t -> tQuery functions.
val extract_expr : t -> Eval.exp -> cvalue Eval.or_bottomval extract_lval : t -> Eval.lval -> precise_loc -> cvalue Eval.or_bottomTransfer functions.
val assign : pos:Position.t -> Frama_c_kernel.Precise_locs.precise_location Eval.left_value -> Eval.exp -> (precise_loc, cvalue) Eval.assigned -> cvalue_valuation -> t -> t Eval.or_bottomval assume : pos:Position.t -> Eval.exp -> bool -> cvalue_valuation -> t -> t Eval.or_bottomval start_call : pos:Position.local -> (precise_loc, cvalue) Eval.call -> cvalue_valuation -> t -> tval finalize_call : pos:Position.local -> (precise_loc, cvalue) Eval.call -> pre:t -> post:t -> t Eval.or_bottomInitialization of variables.
val empty : unit -> tval initialize_variable : Eval.lval -> initialized:bool -> Abstract_domain.init_value -> t -> tval enter_scope : Abstract_domain.variable_kind -> Frama_c_kernel.Cil_types.varinfo list -> t -> tval leave_scope : Frama_c_kernel.Cil_types.kernel_function -> Frama_c_kernel.Cil_types.varinfo list -> t -> t