Module Eval_logic


module Eval_logic: sig .. end
Truth values for a predicate analyzed by the value analysis


Truth values for a predicate analyzed by the value analysis

type predicate_value =
| True
| False
| Unknown
val string_of_predicate_value : predicate_value -> string
val pretty_predicate_value : Format.formatter -> predicate_value -> unit
val join_predicate : predicate_value ->
predicate_value -> predicate_value
exception Stop
val fold_join_predicate : ((predicate_value option ->
'a -> predicate_value option) ->
'b option -> 'c -> predicate_value option) ->
('a -> predicate_value) -> 'c -> predicate_value
exception Predicate_alarm
val predicate_alarm : unit -> 'a
val warn_raise_mode : CilE.warn_mode

Evaluation environments. Used to evaluate predicate on \at nodes

type label =
| Pre
| Here
| Old
| Post

type eval_env = {
   e_cur : label;
   e_pre : Cvalue.Model.t;
   e_here : Cvalue.Model.t;
   e_old : Cvalue.Model.t option;
   e_post : Cvalue.Model.t option;
}
val join_env : eval_env -> eval_env -> eval_env
val extract_opt_env : 'a option -> 'a
val convert_label : Cil_types.logic_label -> label
val env_state : eval_env -> label -> Cvalue.Model.t
val env_current_state : eval_env -> Cvalue.Model.t
val overwrite_state : eval_env ->
Cvalue.Model.t -> label -> eval_env
val overwrite_current_state : eval_env -> Cvalue.Model.t -> eval_env
val env_pre_f : init:Cvalue.Model.t -> eval_env
val env_post_f : pre:Cvalue.Model.t -> post:Cvalue.Model.t -> eval_env
val env_annot : pre:Cvalue.Model.t -> here:Cvalue.Model.t -> eval_env
val (!!) : 'a Lazy.t -> 'a
val lop_to_cop : Cil_types.relation -> Cil_types.binop
val eval_term : eval_env ->
Cil_types.varinfo option ->
Cil_types.term -> (Cil_types.typ * Cvalue.V.t) list
val eval_tlhost : eval_env ->
Cil_types.varinfo option ->
Cil_types.term_lhost -> (Cil_types.typ * Locations.Location_Bits.t) list
val eval_toffset : eval_env ->
Cil_types.varinfo option ->
Cil_types.typ -> Cil_types.term_offset -> (Cil_types.typ * Ival.t) list
val eval_tlval : eval_env ->
Cil_types.varinfo option ->
Cil_types.term -> (Cil_types.typ * Locations.Location_Bits.t) list
val eval_tlval_as_location : eval_env ->
Cil_types.varinfo option -> Cil_types.term -> Locations.location
exception Not_an_exact_loc
val eval_term_as_exact_loc : eval_env ->
Cil_types.varinfo option ->
Cil_types.term -> Cil_types.typ * Locations.location
val reduce_by_predicate : result:Cil_types.varinfo option ->
eval_env ->
bool -> Cil_types.predicate Cil_types.named -> eval_env
val reduce_by_relation : Eval_exprs.eval_int_float ->
result:Cil_types.varinfo option ->
eval_env ->
bool ->
Cil_types.term -> Cil_types.relation -> Cil_types.term -> eval_env
val reduce_by_left_relation : Eval_exprs.eval_int_float ->
result:Cil_types.varinfo option ->
eval_env ->
bool ->
Cil_types.term -> Cil_types.relation -> Cil_types.term -> eval_env
val eval_predicate : result:Cil_types.varinfo option ->
eval_env ->
Cil_types.predicate Cil_types.named -> predicate_value
exception Does_not_improve
val fold_on_disjunction : (Cil_types.predicate Cil_types.named -> 'a -> 'a) ->
Cil_types.predicate Cil_types.named -> 'a -> 'a
val count_disjunction : Cil_types.predicate Cil_types.named -> int
val reduce_by_disjunction : result:Cil_types.varinfo option ->
env:eval_env ->
State_set.t -> int -> Cil_types.predicate Cil_types.named -> State_set.t
module ActiveBehaviors: sig .. end
val check_postconditions : Cil_types.kernel_function ->
Cil_types.kinstr ->
result:Cil_types.varinfo option ->
slevel:int ->
string ->
init_state:State_set.t ->
active_behaviors:ActiveBehaviors.t ->
post_state:State_set.t ->
Cil_types.termination_kind -> Cil_types.funbehavior list -> State_set.t
val check_fct_postconditions : result:Cil_types.varinfo option ->
Kernel_function.t ->
init_state:State_set.t ->
active_behaviors:ActiveBehaviors.t ->
post_state:State_set.t -> Cil_types.termination_kind -> State_set.t
val check_preconditions : Cil_types.kernel_function ->
Cil_types.kinstr ->
slevel:int ->
string ->
ActiveBehaviors.t ->
State_set.t ->
('a, Cil_types.identified_predicate, Cil_types.identified_term)
Cil_types.spec -> State_set.t
val check_fct_preconditions : Kernel_function.t -> Cvalue.Model.t -> State_set.t
Check the precondition of kf. This may result in splitting init_state into multiple states if the precondition contains disjunctions. The active behaviors are computed wrt init_state, but further computations on kf will use active behaviors computed wrt the result of this function.