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
    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 : Eval.Computer.record
    val current_table : Eval.Computer.record Cilutil.InstrHashtbl.t
    val find_current : Cilutil.InstrHashtbl.key -> Eval.Computer.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 :
      sig
        type data = u
        val clear : unit -> unit
        val mem : int -> bool
        val find : int -> data
        val replace : int -> data -> unit
        val add : int -> data -> unit
        val iter : (int -> data -> unit) -> unit
      end
    type t = Eval.Computer.u
    val copy : Eval.Computer.t -> Eval.Computer.t
    val display_one : Format.formatter -> Eval.Computer.u -> unit
    val pretty : Format.formatter -> Eval.Computer.t -> unit
    val computeFirstPredecessor :
      Cil_types.stmt -> Eval.Computer.u -> Eval.Computer.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:Eval.Computer.u -> Eval.Computer.u -> Eval.Computer.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
    val bases_containing_locals :
      Locations.Location_Bits.Top_Param.t Pervasives.ref
    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
    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 : Eval.Computer.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 -> Eval.Computer.t -> Eval.Computer.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 ->
      Eval.Computer.t -> Eval.Computer.u Dataflow.stmtaction
    val doEdge :
      Cil_types.stmt -> Cil_types.stmt -> Eval.Computer.t -> Eval.Computer.t
    val filterStmt : '-> 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 ->
      Eval.Computer.u -> Eval.Computer.u Dataflow.guardaction
  end