functor
  (T : sig
         val name : string
         val debug : bool ref
         type t
         val copy : t -> t
         val pretty : Format.formatter -> t -> unit
         val computeFirstPredecessor : Cil_types.stmt -> t -> t
         val combinePredecessors : Cil_types.stmt -> old:t -> t -> t option
         val doInstr : Cil_types.stmt -> Cil_types.instr -> t -> t action
         val doGuard :
           Cil_types.stmt ->
           Cil_types.exp -> t -> t guardaction * t guardaction
         val doStmt : Cil_types.stmt -> t -> t stmtaction
         val filterStmt : Cil_types.stmt -> bool
         val stmt_can_reach : Cil_types.stmt -> Cil_types.stmt -> bool
         val doEdge : Cil_types.stmt -> Cil_types.stmt -> t -> t
         module StmtStartData :
           sig
             type data = t
             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
       end->
  sig
    val reachedStatement : Cil_types.stmt -> Cil_types.stmt -> T.t -> unit
    val compute : Cil_types.stmt list -> unit
  end