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
    val debug : bool 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 :
      sig
        type data = u
        type key = Cil_types.stmt
        val clear : unit -> unit
        val mem : key -> bool
        val find : key -> data
        val replace : key -> data -> unit
        val add : key -> data -> unit
        val iter : (key -> data -> unit) -> unit
        val length : unit -> int
      end
    type t = Eval_stmts.Computer.u
    val copy : Eval_stmts.Computer.t -> Eval_stmts.Computer.t
    val display_one : Format.formatter -> Eval_stmts.Computer.u -> unit
    val pretty : Format.formatter -> Eval_stmts.Computer.t -> unit
    val computeFirstPredecessor :
      Cil_types.stmt -> Eval_stmts.Computer.u -> Eval_stmts.Computer.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:Eval_stmts.Computer.u ->
      Eval_stmts.Computer.u -> Eval_stmts.Computer.u option
    val bases_containing_locals :
      Locations.Location_Bits.Top_Param.t Pervasives.ref
    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
    val do_assign_abstract_value :
      with_alarms:CilE.warn_mode ->
      Cvalue.Model.t -> Cil_types.lval -> Cvalue.V.t -> Cvalue.Model.t
    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 ->
      Eval_stmts.Computer.t -> Eval_stmts.Computer.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 ->
      Eval_stmts.Computer.t -> Eval_stmts.Computer.u Dataflow.stmtaction
    val doEdge :
      Cil_datatype.Stmt.Hashtbl.key ->
      Cil_types.stmt -> Eval_stmts.Computer.u -> Eval_stmts.Computer.u
    val filterStmt : '-> 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 ->
      Eval_stmts.Computer.u -> Eval_stmts.Computer.u Dataflow.guardaction
    val mask_then : int
    val mask_else : int
    val doGuard :
      Cil_datatype.Stmt.Hashtbl.key ->
      Cil_types.exp ->
      Eval_stmts.Computer.u ->
      Eval_stmts.Computer.u Dataflow.guardaction *
      Eval_stmts.Computer.u Dataflow.guardaction
  end