Functor Eval_stmts.Computer


module Computer: 
functor (AnalysisParam : sig
val stmt_can_reach : Cil_types.stmt -> Cil_types.stmt -> bool
val is_natural_loop : Cil_types.stmt -> bool
val slevel : int
val initial_state : State_set.t
val active_behaviors : Eval_logic.ActiveBehaviors.t
end) -> sig .. end
Parameters:
AnalysisParam : sig val stmt_can_reach : stmt -> stmt -> bool val is_natural_loop : stmt -> bool val slevel: int val initial_state : State_set.t val active_behaviors: Eval_logic.ActiveBehaviors.t end

val debug : bool Pervasives.ref
val name : string
val stmt_can_reach : Cil_types.stmt -> Cil_types.stmt -> bool
val obviously_terminates : Value_parameters.ObviouslyTerminatesAll.t
val slevel : int
val debug : bool Pervasives.ref
val fused_initial_state : Cvalue.Model.t lazy_t
val current_table : Current_table.record Cil_datatype.Stmt.Hashtbl.t
val states_after : Cvalue.Model.t Cil_datatype.Stmt.Hashtbl.t
val store_state_after_during_dataflow : Cil_types.stmt -> Cil_types.stmt -> bool
val local_after_states : Cvalue.Model.t Cil_datatype.Stmt.Hashtbl.t Lazy.t ->
Cvalue.Model.t Cil_datatype.Stmt.Hashtbl.t lazy_t
val merge_after : Cvalue.Model.t Cil_datatype.Stmt.Hashtbl.t Lazy.t -> unit
val conditions_table : int Cil_datatype.Stmt.Hashtbl.t
val merge_current : degenerate:bool -> unit

type u = {
   counter_unroll : int;
   mutable value : State_set.t;
}
module StmtStartData: Dataflow.StartData(sig
type t = Eval_stmts.Computer.u 
val size : int
end)
type t = u 
val copy : t -> t
val display_one : Format.formatter -> u -> unit
val pretty : Format.formatter -> t -> unit
val computeFirstPredecessor : Cil_types.stmt -> u -> u
val getWidenHints : Cil_types.stmt ->
Base.Set.t * (Base.t -> Locations.Location_Bytes.widen_hint)
val counter_unroll_target : int Pervasives.ref
val combinePredecessors : Cil_types.stmt ->
old:u ->
u -> u option
val bases_containing_locals : Locations.Location_Bits.Top_Param.t Pervasives.ref
Clobber list for bases containing addresses of local variables.
val remember_bases_with_locals : Locations.location -> Cvalue.V.t -> unit
val do_assign_abstract_value_to_loc : with_alarms:CilE.warn_mode ->
Cvalue.Model.t ->
Cil_types.lval -> Locations.location -> Cvalue.V.t -> Cvalue.Model.t
Precondition: the type of exp and the type loc_lv may be different only if the cast from typeOf exp and typeOf loc_lv is a truncation or an extension. This function will not perform any conversion (float->int, int->float, ...) exp should not be bottom for optimization purposes in the caller.
val do_assign_abstract_value : with_alarms:CilE.warn_mode ->
Cvalue.Model.t -> Cil_types.lval -> Cvalue.V.t -> Cvalue.Model.t
Precondition: the type of exp and the type loc_lv may be different only if the cast from typeOf exp and typeOfPointed lv is a truncation or an extension. This function will not perform any conversion (float->int, int->float,..)
val offsetmap_top_addresses_of_locals : (Cvalue.V.M.key -> bool) ->
Cvalue.V_Offsetmap.t ->
Locations.Location_Bytes.Top_Param.t * Cvalue.V_Offsetmap.t
val state_top_addresses_of_locals : is_block:bool ->
(Cvalue.V_Offsetmap.t ->
Locations.Location_Bytes.Top_Param.t * Cvalue.V_Offsetmap.t) ->
Cil_types.fundec -> Cvalue.Model.t -> Cvalue.Model.t
val top_addresses_of_locals : Cil_types.fundec ->
(Cvalue.V_Offsetmap.t ->
Locations.Location_Bytes.Top_Param.t * Cvalue.V_Offsetmap.t) *
(Cvalue.Model.t -> Cvalue.Model.t)
val block_top_addresses_of_locals : Cil_types.block list -> Cvalue.Model.t -> Cvalue.Model.t
val do_assign : with_alarms:CilE.warn_mode ->
Cvalue.Model.t -> Cil_types.lval -> Cil_types.exp -> Cvalue.Model.t
val do_assign : with_alarms:CilE.warn_mode ->
Cvalue.Model.t -> Cil_types.lval -> Cil_types.exp -> Cvalue.Model.t
val empty_interpretation_result : 'a option * Cvalue.Model.t * Locations.Location_Bits.Top_Param.t
val assign_return_to_lv : with_alarms:CilE.warn_mode ->
Cil_types.exp ->
Cil_types.lval -> Cvalue.V_Offsetmap.t -> Cvalue.Model.t -> Cvalue.Model.t
val interp_call : Cil_types.stmt ->
Cil_types.lval option ->
Cil_types.exp -> Cil_types.exp list -> State_set.t -> State_set.t
val doInstr : Cil_types.stmt ->
Cil_types.instr ->
t -> t Dataflow.action
val interp_annot : State_set.t ->
Cil_types.stmt -> Cil_types.code_annotation -> bool -> State_set.t
val check_non_overlapping : Cvalue.Model.t -> Cil_types.lval list -> Cil_types.lval list -> unit
val check_unspecified_sequence : Cvalue.Model.t ->
(Cil_types.stmt * Cil_types.lval list * Cil_types.lval list *
Cil_types.lval list * 'a)
list -> unit
val doStmt : Cil_datatype.Stmt.Hashtbl.key ->
t -> u Dataflow.stmtaction
val doEdge : Cil_datatype.Stmt.Hashtbl.key ->
Cil_types.stmt -> u -> u
val filterStmt : 'a -> bool
val externalize : Cil_datatype.Stmt.Hashtbl.key ->
Kernel_function.t ->
Cvalue.V_Offsetmap_ext.t option * Cvalue.Model.t *
Locations.Location_Bits.Top_Param.t
val doGuardOneCond : Cil_types.stmt ->
Cil_types.exp ->
u -> u Dataflow.guardaction
val mask_then : int
val mask_else : int
val doGuard : Cil_datatype.Stmt.Hashtbl.key ->
Cil_types.exp ->
u ->
u Dataflow.guardaction *
u Dataflow.guardaction