Functor Eval.Computer


module Computer: 
functor (REACH : sig
val stmt_can_reach : Cil_types.stmt -> Cil_types.stmt -> bool
val is_natural_loop : Cil_types.stmt -> bool
val blocks_closed_by_edge : Cil_types.stmt -> Cil_types.stmt -> Cil_types.block list
end) -> sig .. end
Parameters:
REACH : sig val stmt_can_reach : stmt -> stmt -> bool val is_natural_loop : stmt -> bool val blocks_closed_by_edge: stmt -> stmt -> block list end

val name : string
val stmt_can_reach : Cil_types.stmt -> Cil_types.stmt -> bool
val debug : bool Pervasives.ref

type record = {
   superposition : State_set.t;
   widening : int;
   widening_state : Relations_type.Model.t;
}
val empty_record : record
val current_table : record Cilutil.InstrHashtbl.t
val find_current : Cilutil.InstrHashtbl.key -> record
val update_current_exn : State_set.t -> unit
val update_current : State_set.t -> unit
val merge_current : degenerate:bool -> unit

type u = {
   counter_unroll : int;
   value : State_set.t Pervasives.ref;
}
module StmtStartData: Dataflow.StmtStartData(sig
type t = Eval.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 ->
BaseUtils.BaseSet.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 do_assign_abstract_value_to_loc : with_alarms:CilE.warn_mode ->
Relations_type.Model.t ->
Cil_types.lval ->
Locations.location -> Cvalue_type.V.t -> Relations_type.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 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_type.V.t -> unit
val do_assign_abstract_value : with_alarms:CilE.warn_mode ->
former_state:Db.Value.state ->
Db.Value.state -> Cil_types.lval -> Cvalue_type.V.t -> Relations_type.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_type.V.M.key -> bool) ->
Cvalue_type.V_Offsetmap.t -> Cvalue_type.V_Offsetmap.t * bool
val state_top_addresses_of_locals : bool ->
(Cvalue_type.Partial_lmap.loffset -> Cvalue_type.Partial_lmap.loffset * bool) ->
Cil_types.fundec -> Relations_type.Model.t -> Relations_type.Model.t
val top_addresses_of_locals : Cil_types.fundec ->
(Cvalue_type.V_Offsetmap.t -> Cvalue_type.V_Offsetmap.t * bool) *
(Relations_type.Model.t -> Relations_type.Model.t)
val block_top_addresses_of_locals : Cil_types.block list -> Relations_type.Model.t -> Relations_type.Model.t
val do_assign : with_alarms:CilE.warn_mode ->
Db.Value.state -> Cil_types.lval -> Cil_types.exp -> Relations_type.Model.t
val do_assign : with_alarms:CilE.warn_mode ->
Db.Value.state -> Cil_types.lval -> Cil_types.exp -> Relations_type.Model.t
exception Got_bottom
val reachables : u -> bool * State_set.t
val empty_interpretation_result : 'a option * Relations_type.Model.t * Locations.Location_Bits.Top_Param.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.predicate Cil_types.named * (Cil_types.annotation_status -> 'a))
list -> State_set.t
val check_non_overlapping : Db.Value.state -> Cil_types.lval list -> Cil_types.lval list -> unit
val check_unspecified_sequence : Db.Value.state ->
(Cil_types.stmt * Cilutil.LvalComparable.t list * Cil_types.lval list *
Cil_types.lval list)
list -> unit
val doStmt : Cil_types.stmt -> t -> u Dataflow.stmtaction
val doEdge : Cil_types.stmt -> Cil_types.stmt -> t -> t
val filterStmt : 'a -> bool
val externalize : Cilutil.InstrHashtbl.key ->
Kernel_function.t ->
Cvalue_type.V_Offsetmap.t option * Relations_type.Model.t *
Locations.Location_Bits.Top_Param.t
val doGuard : Cil_types.stmt ->
Cil_types.exp -> u -> u Dataflow.guardaction