sig
  type 't action = Default | Done of '| Post of ('-> 't)
  type 't stmtaction = SDefault | SDone | SUse of 't
  type 't guardaction = GDefault | GUse of '| GUnreachable
  module type StmtStartData =
    sig
      type data
      val clear : unit -> unit
      val mem : Cil_types.stmt -> bool
      val find : Cil_types.stmt -> Dataflow2.StmtStartData.data
      val replace : Cil_types.stmt -> Dataflow2.StmtStartData.data -> unit
      val add : Cil_types.stmt -> Dataflow2.StmtStartData.data -> unit
      val iter :
        (Cil_types.stmt -> Dataflow2.StmtStartData.data -> unit) -> unit
      val length : unit -> int
    end
  module StartData :
    functor (X : sig type t val size : int end->
      sig
        type data = X.t
        val clear : unit -> unit
        val mem : Cil_types.stmt -> bool
        val find : Cil_types.stmt -> data
        val replace : Cil_types.stmt -> data -> unit
        val add : Cil_types.stmt -> data -> unit
        val iter : (Cil_types.stmt -> data -> unit) -> unit
        val length : unit -> int
      end
  module type ForwardsTransfer =
    sig
      val name : string
      val debug : bool
      type t
      val copy : Dataflow2.ForwardsTransfer.t -> Dataflow2.ForwardsTransfer.t
      val pretty : Format.formatter -> Dataflow2.ForwardsTransfer.t -> unit
      val computeFirstPredecessor :
        Cil_types.stmt ->
        Dataflow2.ForwardsTransfer.t -> Dataflow2.ForwardsTransfer.t
      val combinePredecessors :
        Cil_types.stmt ->
        old:Dataflow2.ForwardsTransfer.t ->
        Dataflow2.ForwardsTransfer.t -> Dataflow2.ForwardsTransfer.t option
      val doInstr :
        Cil_types.stmt ->
        Cil_types.instr ->
        Dataflow2.ForwardsTransfer.t -> Dataflow2.ForwardsTransfer.t
      val doGuard :
        Cil_types.stmt ->
        Cil_types.exp ->
        Dataflow2.ForwardsTransfer.t ->
        Dataflow2.ForwardsTransfer.t Dataflow2.guardaction *
        Dataflow2.ForwardsTransfer.t Dataflow2.guardaction
      val doStmt :
        Cil_types.stmt ->
        Dataflow2.ForwardsTransfer.t ->
        Dataflow2.ForwardsTransfer.t Dataflow2.stmtaction
      val doEdge :
        Cil_types.stmt ->
        Cil_types.stmt ->
        Dataflow2.ForwardsTransfer.t -> Dataflow2.ForwardsTransfer.t
      module StmtStartData :
        sig
          type data = t
          val clear : unit -> unit
          val mem : Cil_types.stmt -> bool
          val find : Cil_types.stmt -> data
          val replace : Cil_types.stmt -> data -> unit
          val add : Cil_types.stmt -> data -> unit
          val iter : (Cil_types.stmt -> data -> unit) -> unit
          val length : unit -> int
        end
    end
  module Forwards :
    functor (T : ForwardsTransfer->
      sig val compute : Cil_types.stmt list -> unit end
  module type BackwardsTransfer =
    sig
      val name : string
      val debug : bool
      type t
      val pretty : Format.formatter -> Dataflow2.BackwardsTransfer.t -> unit
      val funcExitData : Dataflow2.BackwardsTransfer.t
      val combineStmtStartData :
        Cil_types.stmt ->
        old:Dataflow2.BackwardsTransfer.t ->
        Dataflow2.BackwardsTransfer.t -> Dataflow2.BackwardsTransfer.t option
      val combineSuccessors :
        Dataflow2.BackwardsTransfer.t ->
        Dataflow2.BackwardsTransfer.t -> Dataflow2.BackwardsTransfer.t
      val doStmt :
        Cil_types.stmt -> Dataflow2.BackwardsTransfer.t Dataflow2.action
      val doInstr :
        Cil_types.stmt ->
        Cil_types.instr ->
        Dataflow2.BackwardsTransfer.t ->
        Dataflow2.BackwardsTransfer.t Dataflow2.action
      val filterStmt : Cil_types.stmt -> Cil_types.stmt -> bool
      module StmtStartData :
        sig
          type data = t
          val clear : unit -> unit
          val mem : Cil_types.stmt -> bool
          val find : Cil_types.stmt -> data
          val replace : Cil_types.stmt -> data -> unit
          val add : Cil_types.stmt -> data -> unit
          val iter : (Cil_types.stmt -> data -> unit) -> unit
          val length : unit -> int
        end
    end
  module Backwards :
    functor (T : BackwardsTransfer->
      sig val compute : Cil_types.stmt list -> unit end
  val find_stmts :
    Cil_types.fundec -> Cil_types.stmt list * Cil_types.stmt list
end