module MC:
module MV: Mvar.MV
(
MO.M
)
include MV
val model_name : string
type
t_env = MT.t_env
val new_env : unit -> MT.t_env
val texpr : Cil_types.exp -> MT.t_exp option
val translate : Kernel_function.t ->
MT.t_env -> Cil_types.predicate Cil_types.named -> MT.t_pred
val assign_exp : Cil_types.lval ->
MO.M.t_exp option -> MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred
val assign_old_exp : MT(MO.M).t_env ->
Cil_types.lval ->
MO.M.t_exp option -> MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred
val assign : Cil_types.lval ->
Cil_types.exp -> MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred
val test : Cil_types.exp ->
MT.t_data Fol.d_pred -> MT.t_data Fol.d_pred -> MT.t_data Fol.d_pred
val return : Kernel_function.t -> Cil_types.exp option -> MO.M.t_pred -> MO.M.t_pred
val replace_at_vars : MT.t_env ->
Cil_types.logic_label -> MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred
Build the substitution function to restore \at stmt expressions.
stmt_opt == None
means \old
Raises Not_found
if there is no subst to do.
val quantify_at_vars : MT.t_env ->
Cil_types.logic_label -> MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred
val quantify_assigns : (Cil_types.identified_term Cil_types.zone * 'a) list ->
MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred
the property p
is related to a program point Lo
and we want to move
it to a program point Li
. We know that the only modified data between
the two states are assigns
.
The idea is to assigns new variables to the modified data and to quantify
over them. But we have to be careful because of the order of the
assigns
(ex : X, TX
). We have to do a kind of parallel assign...
Moreover, we probably have to sort the variables in order to group
the modifications done from the same variable.
exception CallNeedFctAssigns
exception CallArgsVsParamNb
exception CallFctPtr
val call_do_body : (Cil_types.identified_term Cil_types.zone * 'a) list ->
MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred
Process call assigns : abort if no assigns because we need them
val call_add_pre_and_do_args : Cil_types.exp list ->
Cil_types.varinfo list ->
MO.M.t_data Fol.d_term Fol.t_pred list ->
MO.M.t_data Fol.d_term Fol.t_pred -> MO.M.t_data Fol.d_pred
val call_res_and_add_post : Kernel_function.t ->
MT.t_env ->
Cil_types.lval option ->
MO.M.t_data Fol.d_pred list ->
MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred
val quantify_loop_assigns : (Cil_types.identified_term Cil_types.zone * 'a) list ->
MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred option
quantify the stmt
assigns : return None if no assigns annotation.
val fol : MO.M.t_data Fol.d_pred -> Fol.predicate
val post_at_end : 'a -> 'b -> 'c -> 'c
val quantif_locals : Kernel_function.t -> MT.t_data Fol.d_pred -> MT.t_data Fol.d_pred
Quantify kf
local variables in p
,
and add hypotheses on the size of local arrays if any.
val close : 'a -> Kernel_function.t -> MO.M.t_data Fol.d_pred -> MO.M.t_data Fol.d_pred
val add_glob_decls : Fol.decl list -> Fol.decl list