module type T_data_mem = sig
.. end
Signature for a module that defines basic things on the memory model
val model_name : string
type
t_data
the model has to provide a type to represent the data
type
t_exp = t_data Fol.d_term
type
t_pred = t_data Fol.d_pred
val prop_in_data : (t_exp -> t_exp) ->
t_data -> t_exp
apply the function to the expressions used in the data
val eq_data : t_data -> t_data -> bool
compare 2 data and tell if they are equal
val pp_data : Format.formatter -> t_data -> unit
pretty printer for the data expressions
val mk_cvar_addr : Cil_types.varinfo -> t_exp
build an expression that represent the address of the C variable
val mk_lvar_addr : Cil_types.logic_var -> t_exp
build an expression that represent the address of the logic_var
val mk_cvar : Cil_types.varinfo -> t_exp
build an expression that represent the C variable
val mk_lvar : Cil_types.logic_var -> t_exp
build an expression that represent the logic_var
val mk_field_access : t_exp -> Cil_types.fieldinfo -> t_exp
mk_field_access s f
where s
is a structure and f
a field of this structure
represents s.f
val mk_index_access : t_exp ->
Cil_types.logic_type -> t_exp -> t_exp
mk_index_access t ty i
where t
is an array, and ty
is the type of the array elements,
represents t.(i)
ie. t[i]
in C.
val mk_field_shift : t_exp -> Cil_types.fieldinfo -> t_exp
mk_field_shift ps f
where ps
is the address of a structure,
represents ps+f
ie. the address of the field f
in the structure (&(ps->f)
in C).
val mk_index_shift : t_exp ->
Cil_types.logic_type -> t_exp -> t_exp
mk_index_shift pt ty i
where pt
is the address of an array,
ty
is the type of the array elements,
represents pt+(i)
ie. the address of the element i
in *pt
.
val mk_shift_pointer : t_exp ->
Cil_types.logic_type -> t_exp -> t_exp
mk_shift_pointer p ty i
where p
is a pointer on an element,
and ty
the type of the element,
represents p#(i)
ie. the pointer shifted of i
elements
val mk_access_pointer : t_exp -> Cil_types.logic_type -> t_exp
mk_access_pointer p ty
where p
is a pointer and ty
the type of the pointed object,
represents p.*
ie *p
in C.
val mk_field_update : t_exp ->
Cil_types.fieldinfo -> t_exp -> t_exp
mk_field_update s f x
where s
is a structure and f
a field of this structure
represents mu (s, f -> x)
val mk_index_update : t_exp ->
t_exp -> t_exp -> t_exp
mk_index_update t i x
where t
is an array and i
an index in this array,
represents mu (t, (i) -> x)
val expr_cast : Cil_types.typ -> t_exp -> t_exp