Module Register.Store


module Store: Store_mem.Create(D)(A)(R)

val unsupported : ?model:string -> ('a, Format.formatter, unit, 'b) Pervasives.format4 -> 'a
module F: D.F
type m_memory 
val t_memory : Formula.tau
type store = m_memory F.term 
type m_alloc 
val t_alloc : Formula.tau
type tbl_alloc = m_alloc F.term 

type mem = {
   store : store;
   talloc : tbl_alloc;
}
type m_dzone 
type dzone = m_dzone F.term 
val addr_format : D.format
val model_addr : D.integer -> D.integer -> D.integer
val model_base : D.integer -> D.integer
val model_offset : D.integer -> D.integer
val model_addr_shift : D.integer -> D.integer -> D.integer
val model_addr_of_pointer : Model.D.pointer -> D.integer
val model_offset_of_pointer : D.pointer -> D.integer
val model_pointer_of_addr : D.integer -> D.pointer
val model_valid : tbl_alloc ->
D.integer -> D.integer -> F.pred
val model_isfresh : store ->
tbl_alloc -> D.integer -> F.pred
val model_alloc : tbl_alloc ->
D.integer -> D.integer -> tbl_alloc
val model_free : tbl_alloc -> D.integer -> tbl_alloc
val model_block : tbl_alloc -> D.integer -> D.integer
val model_access : store -> D.integer -> D.abstract
val model_update : store -> D.integer -> D.abstract -> store
val model_zempty : dzone
val model_zunion : dzone -> dzone -> dzone
val model_included : dzone -> dzone -> F.pred
val model_zrange : D.integer -> D.integer -> D.integer -> dzone
val model_zrange_of_addr_range : D.integer -> D.integer -> D.integer -> dzone
val model_separated : dzone -> dzone -> F.pred
val model_update_range : store ->
dzone -> D.abstract -> store
val model_access_range : store -> dzone -> D.abstract
val model_ishavoc : tbl_alloc ->
store ->
dzone -> store -> F.pred
module Z: Region.Create(D)(sig
module F: D.F
type addr = D.integer 
val pp_addr : Format.formatter -> 'a F.term -> unit
val closed : 'a F.term -> bool
val equal : 'a F.term ->
'a F.term -> F.pred
val fresh : F.pool ->
F.var * 'a F.term
end)
val zero : Formula.integer F.term
val one : Formula.integer F.term
val sub : Formula.integer F.term ->
Formula.integer F.term ->
Formula.integer F.term
val add : Formula.integer F.term ->
Formula.integer F.term ->
Formula.integer F.term
val mul : Formula.integer F.term ->
Formula.integer F.term ->
Formula.integer F.term
val sizeof : Ctypes.c_object -> Formula.integer F.term
val n_size : Formula.integer F.term ->
Ctypes.c_object -> Formula.integer F.term
val add_offset : Formula.integer F.term ->
Ctypes.c_object ->
Formula.integer F.term ->
Formula.integer F.term
val cardinal : Formula.integer F.term ->
Formula.integer F.term ->
Formula.integer F.term
val offset_of_field : Cil_datatype.Fieldinfo.t -> Formula.integer F.term
module Model: sig .. end
module Globals: D.Register(sig
include D.Varinfo
val declare : D.Xindex.t -> 'a -> Store_mem.Create.F.pred Formula.item
val section : Formula.section
val prefix : string
val basename : Cil_types.varinfo -> string
val clear : unit -> unit
val pp_descr : Format.formatter -> 'a -> unit
end)
module Data: sig .. end
module DF: Data_mem.Create(Data)
include Data
val startof : Model.loc -> 'a -> Model.loc
val base_address : 'a -> Model.loc -> Model.loc
val block_length : mem -> Model.loc -> D.integer
val cast_loc_to_loc : 'a -> 'b -> 'c -> 'd
val zrange : Model.loc -> D.integer -> dzone
val load_with : D.format ->
store -> Model.loc -> 'a D.F.term
val load_mem : store ->
Ctypes.c_object -> Model.loc -> value
val store_with : store ->
Model.loc ->
D.format -> 'a D.F.term -> store
val store_mem : store ->
Ctypes.c_object ->
Model.loc -> value -> store
val load : mem ->
Ctypes.c_object -> Model.loc -> value
val tau_of_dzone : Formula.tau

type assignable =
| Avar of Cil_types.varinfo * D.integer
| Aaddr of D.integer
| Arange of D.integer * D.integer * D.integer
val addr_of_assignable : assignable -> D.integer
val zone_of_assignable : assignable -> dzone
val assignable_loc : 'a -> Model.loc -> assignable
val assignable_range : Ctypes.c_object ->
Model.loc -> D.interval -> assignable
val assignable : Model.loc D.assigned -> assignable
val dzone_assigned : Model.loc D.assigned -> dzone
val dzone_subset : dzone -> dzone -> F.pred
val dzone_union : dzone -> dzone -> dzone
val dzone_empty : unit -> dzone
val effect_supported : bool
val assignable_sizeof : 'a D.assigned -> Formula.integer F.term
val valid : mem ->
Model.loc D.assigned -> F.pred
val separated : Model.loc D.assigned ->
Model.loc D.assigned -> F.pred
type region = Z.region 
val pp_region : Format.formatter -> Z.region -> unit
val region_of_loc : Ctypes.c_object -> Model.loc -> Z.region
val region_range : Ctypes.c_object ->
Model.loc -> D.interval -> Z.region
val region_assigned : Model.loc D.assigned -> Z.region
val region_empty : unit -> Z.region
val region_union : Z.region ->
Z.region -> Z.region
val region_included : Z.region -> Z.region -> D.F.pred
val region_separated : Z.region -> Z.region -> D.F.pred
val region_fingerprint : D.F.pool ->
Z.region ->
D.F.var list * D.F.pred * Z.region
val region_supported : bool

type frame = {
   mutable states : (Clabels.c_label * (F.var * F.var)) list;
   mutable memories : (Clabels.c_label * mem) list;
   mutable result : F.var option;
   mutable exit_status : F.var option;
   return : Cil_types.typ option;
}
val new_frame : Kernel_function.t ->
m_here:mem option ->
m_pre:mem option ->
m_post:mem option ->
F.var option -> frame
val get_result : frame -> F.var * Cil_types.typ
val get_exit : frame -> F.var
val set_exit_status : frame -> F.var -> frame
val varmem_at : frame ->
Clabels.c_label -> F.var * F.var
val mem_at : frame -> Clabels.c_label -> mem
val result : frame -> F.var * Cil_types.typ
val exit_status : frame -> F.var
val get_exit_status : frame -> F.var option
val update_at_label : frame -> Clabels.c_label -> D.F.pred -> D.F.pred
val quantify_at_label : frame -> Clabels.c_label -> D.F.pred -> D.F.pred
val subst_lval : frame ->
Ctypes.c_object ->
Model.loc -> value -> D.F.pred -> D.F.pred
val subst_result : frame -> value option -> D.F.pred -> D.F.pred
val alloc_vars : frame -> D.Xindex.t list -> D.F.pred -> D.F.pred
val free_vars : frame -> D.Xindex.t list -> D.F.pred -> D.F.pred
val fresh_vars : frame ->
D.Xindex.t list -> F.pred -> F.pred
val notexists_vars : frame ->
D.Xindex.t list -> F.pred -> F.pred
val local_scope : frame ->
D.Xindex.t list ->
Mcfg.scope -> F.pred -> F.pred
val subst_havoc : frame ->
Model.loc D.assigned -> D.havoc list
val region : Model.loc D.assigned list -> dzone
val assigns_goal : frame ->
Clabels.c_label ->
Model.loc D.assigned list ->
Clabels.c_label -> F.pred
val assigns_supported : bool

type closure =
| Mem of string
| Alloc of string
val pp_closure : Format.formatter -> closure -> unit
val userdef_frame : unit -> frame
val userdef_signature : frame ->
'a -> 'b -> F.var list * closure list
val userdef_closure : mem ->
closure -> Formula.abstract F.term
val label_at_closure : closure -> string