module CV: CfgWeakestPrecondition.Create
(
sig
include WpModel
val model : string
end
)
module F: WpModel.F
module D: WpModel.L
module E: Translate_expr.Create
(
WpModel
)
module L: Translate_prop.Create
(
WpModel
)
val predicate : L.env ->
Cil_types.predicate Cil_types.named -> WpModel.F.pred Wp_error.cc
val expr : WpModel.mem -> Cil_types.exp -> WpModel.value Wp_error.cc
val addr : WpModel.mem -> Cil_types.lval -> WpModel.loc Wp_error.cc
val cond : WpModel.mem -> Cil_types.exp -> WpModel.F.pred Wp_error.cc
val cast : Cil_types.typ -> Cil_types.typ -> WpModel.value -> WpModel.value Wp_error.cc
type
t_env = F.pool * L.env
type
t_prop = assigns_kind *
property
type
property = {
|
bindings : D.bindings ; |
|
property : F.pred ; |
}
type
assigns_kind =
type
effect_assigns = {
}
val empty : assigns_kind *
property
val zip : 'a * property ->
D.F.pred
val merge_assigns : assigns_kind ->
assigns_kind ->
assigns_kind
val merge_property : (D.F.pred ->
D.F.pred ->
F.pred) ->
property ->
property ->
property
val is_empty : 'a * property -> bool
val merge : assigns_kind *
property ->
assigns_kind *
property ->
assigns_kind *
property
val pretty : Format.formatter -> 'a * property -> unit
val new_env : ?lvars:Cil_types.logic_var list ->
Kernel_function.t ->
F.pool * L.env
type
closing =
| |
Keep_opened |
| |
Close_context |
type
assigns =
val pp_vars : Format.formatter -> Cil_types.varinfo list -> unit
val close_property : string ->
D.context ->
F.pred ->
closing ->
property
exception Failed
val on_context : D.F.pool * L.env ->
string ->
assigns_kind *
property ->
closing ->
assigns ->
(L.env ->
assigns_kind ->
F.pred -> F.pred) ->
t_prop
val label : D.F.pool * L.env ->
Clabels.c_label ->
assigns_kind *
property ->
t_prop
val tag : string ->
'a * property ->
'a * property
val merge_with : (D.F.pred ->
D.F.pred ->
F.pred) ->
assigns_kind *
property ->
assigns_kind *
property ->
assigns_kind *
property
val add_hyp : D.F.pool * L.env ->
WpPropId.prop_id * Cil_types.predicate Cil_types.named ->
assigns_kind *
property ->
t_prop
val add_goal : D.F.pool * L.env ->
WpPropId.prop_id * Cil_types.predicate Cil_types.named ->
assigns_kind *
property ->
t_prop
val add_axiom : 'a ->
string ->
Cil_types.logic_label list -> Cil_types.predicate Cil_types.named -> unit
exception SkipInit
val compute_init_loc : WpModel.mem -> Cil_types.lval -> WpModel.loc
val compute_init_value : WpModel.mem -> Cil_types.exp -> WpModel.value
val init_value : D.F.pool * L.env ->
Cil_types.lval ->
Cil_types.typ ->
Cil_types.exp option ->
assigns_kind *
property ->
t_prop
val init_range : D.F.pool * L.env ->
Cil_types.lval ->
Cil_types.typ ->
int64 ->
int64 ->
assigns_kind *
property ->
t_prop
val assign : D.F.pool * L.env ->
Cil_types.lval ->
Cil_types.exp ->
assigns_kind *
property ->
t_prop
val return : D.F.pool * L.env ->
Cil_types.exp option ->
assigns_kind *
property ->
t_prop
val test : D.F.pool * L.env ->
Cil_types.exp ->
assigns_kind *
property ->
assigns_kind *
property ->
t_prop
val case_of_exp : WpModel.mem -> Cil_types.exp -> F.integer
val switch : D.F.pool * L.env ->
Cil_types.exp ->
(Cil_types.exp list *
(assigns_kind *
property))
list ->
assigns_kind *
property ->
t_prop
val scope : D.F.pool * L.env ->
Cil_types.varinfo list ->
Mcfg.scope ->
assigns_kind *
property ->
t_prop
val build_prop_of_from : D.F.pool * L.env ->
WpPropId.pred_info list ->
assigns_kind *
property ->
t_prop
val close : D.F.pool * L.env ->
assigns_kind *
property ->
t_prop
val translate_assigned_targets : L.env ->
Cil_types.term list -> WpModel.loc WpModel.F.assigned list Wp_error.cc
val translate_assigned : L.env ->
(Cil_types.identified_term * 'a) list ->
WpModel.loc WpModel.F.assigned list Wp_error.cc
type
assigned =
| |
A_everything |
| |
A_region of WpModel.loc F.assigned list |
val assigned_of_assigns : L.env ->
Cil_types.identified_term Cil_types.assigns ->
assigned
val assigned_for_assigns_goal : WpPropId.a_kind ->
Clabels.c_label ->
L.env ->
(Cil_types.identified_term * 'a) list -> WpModel.loc WpModel.F.assigned list
val havoc_region : WpPropId.a_kind ->
WpModel.mem ->
assigned ->
D.F.pred ->
D.F.pred
val assigns_method : unit -> Mcfg.assigns_method
val add_normal_assigns : D.F.pool * L.env ->
WpPropId.prop_id ->
Cil_types.logic_label ->
WpPropId.a_kind ->
(Cil_types.identified_term * 'a) list ->
assigns_kind *
property ->
t_prop
val add_effect_assigns : D.F.pool * L.env ->
WpPropId.prop_id ->
Cil_types.logic_label ->
WpPropId.a_kind ->
(Cil_types.identified_term * 'a) list ->
assigns_kind *
property ->
t_prop
val add_assigns : D.F.pool * L.env ->
WpPropId.prop_id * WpPropId.assigns_desc ->
assigns_kind *
property ->
t_prop
val check_assigns : WpModel.mem ->
assigns_kind ->
assigned ->
F.pred -> F.pred
val use_assigns : D.F.pool * L.env ->
WpPropId.prop_id option ->
WpPropId.assigns_desc ->
assigns_kind *
property ->
t_prop
type
callenv = {
|
callsite : Clabels.c_label ; |
|
m_pre : WpModel.mem ; |
|
m_post : WpModel.mem ; |
|
v_args : WpModel.value list ; |
}
val callenv : L.env ->
Cil_types.stmt -> Cil_types.exp list -> callenv
val do_prop : L.env ->
string ->
Cil_types.predicate Cil_types.named -> F.pred
val do_properties : L.env ->
string ->
('a * Cil_types.predicate Cil_types.named) list ->
F.pred
val do_hypothesis : L.env ->
string ->
('a * Cil_types.predicate Cil_types.named) list ->
F.pred -> F.pred
val do_return : callenv ->
Kernel_function.t ->
Cil_types.lval option ->
WpModel.F.pred ->
WpModel.F.pred * D.F.var option
val call_goal_precond : D.F.pool * L.env ->
Cil_types.stmt ->
Kernel_function.t ->
Cil_types.exp list ->
pre:('a * Cil_types.predicate Cil_types.named) list ->
assigns_kind *
property ->
t_prop
val add_dependencies : Property.t list -> unit
val call_normal_only : D.F.pool * L.env ->
Cil_types.stmt ->
Cil_types.lval option ->
Kernel_function.t ->
Cil_types.exp list ->
pre:('a * Cil_types.predicate Cil_types.named) list ->
post:('b * Cil_types.predicate Cil_types.named) list ->
assigns:Cil_types.identified_term Cil_types.assigns ->
p_post:assigns_kind *
property ->
t_prop
val call_exit_only : D.F.pool * L.env ->
Cil_types.stmt ->
Kernel_function.t ->
Cil_types.exp list ->
pre:('a * Cil_types.predicate Cil_types.named) list ->
pexit:('b * Cil_types.predicate Cil_types.named) list ->
assigns:Cil_types.identified_term Cil_types.assigns ->
p_exit:assigns_kind *
property ->
t_prop
val call : D.F.pool * L.env ->
Cil_types.stmt ->
Cil_types.lval option ->
Kernel_function.t ->
Cil_types.exp list ->
pre:('a * Cil_types.predicate Cil_types.named) list ->
post:('b * Cil_types.predicate Cil_types.named) list ->
pexit:('c * Cil_types.predicate Cil_types.named) list ->
assigns:Cil_types.identified_term Cil_types.assigns ->
p_post:t_prop ->
p_exit:t_prop ->
assigns_kind *
property