sig
  type 'a action = Default | Done of '| Post of ('-> 'a)
  type 'a stmtaction = SDefault | SDone | SUse of 'a
  type 'a guardaction = GDefault | GUse of '| GUnreachable
  module type ForwardsTransfer =
    sig
      val name : string
      val debug : bool Pervasives.ref
      type t
      val copy : Dataflow.ForwardsTransfer.t -> Dataflow.ForwardsTransfer.t
      val stmtStartData : Dataflow.ForwardsTransfer.t Inthash.t
      val pretty : unit -> Dataflow.ForwardsTransfer.t -> Pretty.doc
      val computeFirstPredecessor :
        Cil.stmt ->
        Dataflow.ForwardsTransfer.t -> Dataflow.ForwardsTransfer.t
      val combinePredecessors :
        Cil.stmt ->
        old:Dataflow.ForwardsTransfer.t ->
        Dataflow.ForwardsTransfer.t -> Dataflow.ForwardsTransfer.t option
      val doInstr :
        Cil.instr ->
        Dataflow.ForwardsTransfer.t ->
        Dataflow.ForwardsTransfer.t Dataflow.action
      val doStmt :
        Cil.stmt ->
        Dataflow.ForwardsTransfer.t ->
        Dataflow.ForwardsTransfer.t Dataflow.stmtaction
      val doGuard :
        Cil.exp ->
        Dataflow.ForwardsTransfer.t ->
        Dataflow.ForwardsTransfer.t Dataflow.guardaction
      val filterStmt : Cil.stmt -> bool
    end
  module ForwardsDataFlow :
    functor (T : ForwardsTransfer->
      sig val compute : Cil.stmt list -> unit end
  module type BackwardsTransfer =
    sig
      val name : string
      val debug : bool Pervasives.ref
      type t
      val pretty : unit -> Dataflow.BackwardsTransfer.t -> Pretty.doc
      val stmtStartData : Dataflow.BackwardsTransfer.t Inthash.t
      val funcExitData : Dataflow.BackwardsTransfer.t
      val combineStmtStartData :
        Cil.stmt ->
        old:Dataflow.BackwardsTransfer.t ->
        Dataflow.BackwardsTransfer.t -> Dataflow.BackwardsTransfer.t option
      val combineSuccessors :
        Dataflow.BackwardsTransfer.t ->
        Dataflow.BackwardsTransfer.t -> Dataflow.BackwardsTransfer.t
      val doStmt : Cil.stmt -> Dataflow.BackwardsTransfer.t Dataflow.action
      val doInstr :
        Cil.instr ->
        Dataflow.BackwardsTransfer.t ->
        Dataflow.BackwardsTransfer.t Dataflow.action
      val filterStmt : Cil.stmt -> Cil.stmt -> bool
    end
  module BackwardsDataFlow :
    functor (T : BackwardsTransfer->
      sig val compute : Cil.stmt list -> unit end
  val find_stmts : Cil.fundec -> Cil.stmt list * Cil.stmt list
end