sig
  module DF :
    sig
      type 't action =
        'Dataflow2.action =
          Default
        | Done of 't
        | Post of ('-> 't)
      type 't stmtaction =
        'Dataflow2.stmtaction =
          SDefault
        | SDone
        | SUse of 't
      type 't guardaction =
        'Dataflow2.guardaction =
          GDefault
        | GUse of 't
        | GUnreachable
      module type StmtStartData =
        sig
          type data
          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 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 : 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
          val doGuard :
            Cil_types.stmt ->
            Cil_types.exp -> t -> t guardaction * t guardaction
          val doStmt : Cil_types.stmt -> t -> t stmtaction
          val doEdge : Cil_types.stmt -> Cil_types.stmt -> t -> 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 -> t -> unit
          val funcExitData : t
          val combineStmtStartData : Cil_types.stmt -> old:t -> t -> t option
          val combineSuccessors : t -> t -> t
          val doStmt : Cil_types.stmt -> t action
          val doInstr : Cil_types.stmt -> Cil_types.instr -> t -> t 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
  module UD :
    sig
      module VS :
        sig
          type elt = Cil_datatype.Varinfo.t
          type t = Cil_datatype.Varinfo.Set.t
          val empty : t
          val is_empty : t -> bool
          val mem : elt -> t -> bool
          val add : elt -> t -> t
          val singleton : elt -> t
          val remove : elt -> t -> t
          val union : t -> t -> t
          val inter : t -> t -> t
          val diff : t -> t -> t
          val subset : t -> t -> bool
          val iter : (elt -> unit) -> t -> unit
          val fold : (elt -> '-> 'a) -> t -> '-> 'a
          val for_all : (elt -> bool) -> t -> bool
          val exists : (elt -> bool) -> t -> bool
          val filter : (elt -> bool) -> t -> t
          val partition : (elt -> bool) -> t -> t * t
          val cardinal : t -> int
          val elements : t -> elt list
          val choose : t -> elt
          val split : elt -> t -> t * bool * t
          val find : elt -> t -> elt
          val of_list : elt list -> t
          val min_elt : t -> elt
          val max_elt : t -> elt
          val nearest_elt_le : elt -> t -> elt
          val nearest_elt_ge : elt -> t -> elt
          val ty : t Type.t
          val name : string
          val descr : t Descr.t
          val packed_descr : Structural_descr.pack
          val reprs : t list
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val hash : t -> int
          val pretty_code : Format.formatter -> t -> unit
          val internal_pretty_code :
            Type.precedence -> Format.formatter -> t -> unit
          val pretty : Format.formatter -> t -> unit
          val varname : t -> string
          val mem_project : (Project_skeleton.t -> bool) -> t -> bool
          val copy : t -> t
        end
      val getUseDefFunctionRef :
        (Cil_types.exp ->
         Cil_types.exp list -> VS.t * VS.t * Cil_types.exp list)
        ref
      val considerVariableUse : (Cil_types.varinfo -> bool) ref
      val considerVariableDef : (Cil_types.varinfo -> bool) ref
      val considerVariableAddrOfAsUse : (Cil_types.varinfo -> bool) ref
      val extraUsesOfExpr : (Cil_types.exp -> VS.t) ref
      val onlyNoOffsetsAreDefs : bool ref
      val ignoreSizeof : bool ref
      val varUsed : VS.t ref
      val varDefs : VS.t ref
      class useDefVisitorClass : Cil.cilVisitor
      val useDefVisitor : useDefVisitorClass
      val computeUseExp : ?acc:VS.t -> Cil_types.exp -> VS.t
      val computeUseDefInstr :
        ?acc_used:VS.t -> ?acc_defs:VS.t -> Cil_types.instr -> VS.t * VS.t
      val computeUseDefStmtKind :
        ?acc_used:VS.t -> ?acc_defs:VS.t -> Cil_types.stmtkind -> VS.t * VS.t
      val computeDeepUseDefStmtKind :
        ?acc_used:VS.t -> ?acc_defs:VS.t -> Cil_types.stmtkind -> VS.t * VS.t
      val computeUseLocalTypes : ?acc_used:VS.t -> Cil_types.fundec -> VS.t
    end
  module L :
    sig
      module UD :
        sig
          module VS :
            sig
              type elt = Cil_datatype.Varinfo.t
              type t = Cil_datatype.Varinfo.Set.t
              val empty : t
              val is_empty : t -> bool
              val mem : elt -> t -> bool
              val add : elt -> t -> t
              val singleton : elt -> t
              val remove : elt -> t -> t
              val union : t -> t -> t
              val inter : t -> t -> t
              val diff : t -> t -> t
              val subset : t -> t -> bool
              val iter : (elt -> unit) -> t -> unit
              val fold : (elt -> '-> 'a) -> t -> '-> 'a
              val for_all : (elt -> bool) -> t -> bool
              val exists : (elt -> bool) -> t -> bool
              val filter : (elt -> bool) -> t -> t
              val partition : (elt -> bool) -> t -> t * t
              val cardinal : t -> int
              val elements : t -> elt list
              val choose : t -> elt
              val split : elt -> t -> t * bool * t
              val find : elt -> t -> elt
              val of_list : elt list -> t
              val min_elt : t -> elt
              val max_elt : t -> elt
              val nearest_elt_le : elt -> t -> elt
              val nearest_elt_ge : elt -> t -> elt
              val ty : t Type.t
              val name : string
              val descr : t Descr.t
              val packed_descr : Structural_descr.pack
              val reprs : t list
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val hash : t -> int
              val pretty_code : Format.formatter -> t -> unit
              val internal_pretty_code :
                Type.precedence -> Format.formatter -> t -> unit
              val pretty : Format.formatter -> t -> unit
              val varname : t -> string
              val mem_project : (Project_skeleton.t -> bool) -> t -> bool
              val copy : t -> t
            end
          val getUseDefFunctionRef :
            (Cil_types.exp ->
             Cil_types.exp list -> VS.t * VS.t * Cil_types.exp list)
            ref
          val considerVariableUse : (Cil_types.varinfo -> bool) ref
          val considerVariableDef : (Cil_types.varinfo -> bool) ref
          val considerVariableAddrOfAsUse : (Cil_types.varinfo -> bool) ref
          val extraUsesOfExpr : (Cil_types.exp -> VS.t) ref
          val onlyNoOffsetsAreDefs : bool ref
          val ignoreSizeof : bool ref
          val varUsed : VS.t ref
          val varDefs : VS.t ref
          class useDefVisitorClass : Cil.cilVisitor
          val useDefVisitor : useDefVisitorClass
          val computeUseExp : ?acc:VS.t -> Cil_types.exp -> VS.t
          val computeUseDefInstr :
            ?acc_used:VS.t ->
            ?acc_defs:VS.t -> Cil_types.instr -> VS.t * VS.t
          val computeUseDefStmtKind :
            ?acc_used:VS.t ->
            ?acc_defs:VS.t -> Cil_types.stmtkind -> VS.t * VS.t
          val computeDeepUseDefStmtKind :
            ?acc_used:VS.t ->
            ?acc_defs:VS.t -> Cil_types.stmtkind -> VS.t * VS.t
          val computeUseLocalTypes :
            ?acc_used:VS.t -> Cil_types.fundec -> VS.t
        end
      module VS :
        sig
          type elt = Cil_datatype.Varinfo.t
          type t = Cil_datatype.Varinfo.Set.t
          val empty : t
          val is_empty : t -> bool
          val mem : elt -> t -> bool
          val add : elt -> t -> t
          val singleton : elt -> t
          val remove : elt -> t -> t
          val union : t -> t -> t
          val inter : t -> t -> t
          val diff : t -> t -> t
          val subset : t -> t -> bool
          val iter : (elt -> unit) -> t -> unit
          val fold : (elt -> '-> 'a) -> t -> '-> 'a
          val for_all : (elt -> bool) -> t -> bool
          val exists : (elt -> bool) -> t -> bool
          val filter : (elt -> bool) -> t -> t
          val partition : (elt -> bool) -> t -> t * t
          val cardinal : t -> int
          val elements : t -> elt list
          val choose : t -> elt
          val split : elt -> t -> t * bool * t
          val find : elt -> t -> elt
          val of_list : elt list -> t
          val min_elt : t -> elt
          val max_elt : t -> elt
          val nearest_elt_le : elt -> t -> elt
          val nearest_elt_ge : elt -> t -> elt
          val ty : t Type.t
          val name : string
          val descr : t Descr.t
          val packed_descr : Structural_descr.pack
          val reprs : t list
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val hash : t -> int
          val pretty_code : Format.formatter -> t -> unit
          val internal_pretty_code :
            Type.precedence -> Format.formatter -> t -> unit
          val pretty : Format.formatter -> t -> unit
          val varname : t -> string
          val mem_project : (Project_skeleton.t -> bool) -> t -> bool
          val copy : t -> t
        end
      val debug : bool ref
      val live_label : String.t ref
      val live_func : String.t ref
      val debug_print : Format.formatter -> VS.t -> unit
      val min_print : Format.formatter -> VS.t -> unit
      val printer : (Format.formatter -> VS.t -> unit) ref
      module LiveFlow :
        sig
          val name : string
          val debug : bool
          type t = VS.t
          module StmtStartData :
            sig
              type data = VS.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
          val pretty : Format.formatter -> VS.t -> unit
          val funcExitData : VS.t
          val combineStmtStartData : Cil_types.stmt -> old:t -> t -> t option
          val combineSuccessors : VS.t -> VS.t -> VS.t
          val doStmt : Cil_types.stmt -> UD.VS.t Dataflow2.action
          val doInstr : '-> Cil_types.instr -> '-> VS.t Dataflow2.action
          val filterStmt : '-> '-> bool
        end
      module L : sig val compute : Cil_types.stmt list -> unit end
      val all_stmts : Cil_types.stmt list ref
      class nullAdderClass :
        object
          method behavior : Cil.visitor_behavior
          method current_func : Cil_types.fundec option
          method current_kinstr : Cil_types.kinstr
          method current_stmt : Cil_types.stmt option
          method fill_global_tables : unit
          method get_filling_actions : (unit -> unit) Queue.t
          method plain_copy_visitor : Cil.cilVisitor
          method pop_stmt : Cil_types.stmt -> unit
          method project : Project.t option
          method push_stmt : Cil_types.stmt -> unit
          method queueInstr : Cil_types.instr list -> unit
          method reset_current_func : unit -> unit
          method set_current_func : Cil_types.fundec -> unit
          method unqueueInstr : unit -> Cil_types.instr list
          method vallocates :
            Cil_types.identified_term list ->
            Cil_types.identified_term list Cil.visitAction
          method vallocation :
            Cil_types.identified_term Cil_types.allocation ->
            Cil_types.identified_term Cil_types.allocation Cil.visitAction
          method vannotation :
            Cil_types.global_annotation ->
            Cil_types.global_annotation Cil.visitAction
          method vassigns :
            Cil_types.identified_term Cil_types.assigns ->
            Cil_types.identified_term Cil_types.assigns Cil.visitAction
          method vattr :
            Cil_types.attribute -> Cil_types.attribute list Cil.visitAction
          method vattrparam :
            Cil_types.attrparam -> Cil_types.attrparam Cil.visitAction
          method vbehavior :
            Cil_types.funbehavior -> Cil_types.funbehavior Cil.visitAction
          method vblock : Cil_types.block -> Cil_types.block Cil.visitAction
          method vcode_annot :
            Cil_types.code_annotation ->
            Cil_types.code_annotation Cil.visitAction
          method vcompinfo :
            Cil_types.compinfo -> Cil_types.compinfo Cil.visitAction
          method vdeps :
            Cil_types.identified_term Cil_types.deps ->
            Cil_types.identified_term Cil_types.deps Cil.visitAction
          method venuminfo :
            Cil_types.enuminfo -> Cil_types.enuminfo Cil.visitAction
          method venumitem :
            Cil_types.enumitem -> Cil_types.enumitem Cil.visitAction
          method vexpr : Cil_types.exp -> Cil_types.exp Cil.visitAction
          method vfieldinfo :
            Cil_types.fieldinfo -> Cil_types.fieldinfo Cil.visitAction
          method vfile : Cil_types.file -> Cil_types.file Cil.visitAction
          method vfrees :
            Cil_types.identified_term list ->
            Cil_types.identified_term list Cil.visitAction
          method vfrom :
            Cil_types.identified_term Cil_types.from ->
            Cil_types.identified_term Cil_types.from Cil.visitAction
          method vfunc : Cil_types.fundec -> Cil_types.fundec Cil.visitAction
          method vglob :
            Cil_types.global -> Cil_types.global list Cil.visitAction
          method videntified_predicate :
            Cil_types.identified_predicate ->
            Cil_types.identified_predicate Cil.visitAction
          method videntified_term :
            Cil_types.identified_term ->
            Cil_types.identified_term Cil.visitAction
          method vimpact_pragma :
            Cil_types.term Cil_types.impact_pragma ->
            Cil_types.term Cil_types.impact_pragma Cil.visitAction
          method vinit :
            Cil_types.varinfo ->
            Cil_types.offset ->
            Cil_types.init -> Cil_types.init Cil.visitAction
          method vinitoffs :
            Cil_types.offset -> Cil_types.offset Cil.visitAction
          method vinst :
            Cil_types.instr -> Cil_types.instr list Cil.visitAction
          method vlogic_ctor_info_decl :
            Cil_types.logic_ctor_info ->
            Cil_types.logic_ctor_info Cil.visitAction
          method vlogic_ctor_info_use :
            Cil_types.logic_ctor_info ->
            Cil_types.logic_ctor_info Cil.visitAction
          method vlogic_info_decl :
            Cil_types.logic_info -> Cil_types.logic_info Cil.visitAction
          method vlogic_info_use :
            Cil_types.logic_info -> Cil_types.logic_info Cil.visitAction
          method vlogic_label :
            Cil_types.logic_label -> Cil_types.logic_label Cil.visitAction
          method vlogic_type :
            Cil_types.logic_type -> Cil_types.logic_type Cil.visitAction
          method vlogic_type_def :
            Cil_types.logic_type_def ->
            Cil_types.logic_type_def Cil.visitAction
          method vlogic_type_info_decl :
            Cil_types.logic_type_info ->
            Cil_types.logic_type_info Cil.visitAction
          method vlogic_type_info_use :
            Cil_types.logic_type_info ->
            Cil_types.logic_type_info Cil.visitAction
          method vlogic_var_decl :
            Cil_types.logic_var -> Cil_types.logic_var Cil.visitAction
          method vlogic_var_use :
            Cil_types.logic_var -> Cil_types.logic_var Cil.visitAction
          method vloop_pragma :
            Cil_types.term Cil_types.loop_pragma ->
            Cil_types.term Cil_types.loop_pragma Cil.visitAction
          method vlval : Cil_types.lval -> Cil_types.lval Cil.visitAction
          method vmodel_info :
            Cil_types.model_info -> Cil_types.model_info Cil.visitAction
          method voffs : Cil_types.offset -> Cil_types.offset Cil.visitAction
          method vpredicate :
            Cil_types.predicate -> Cil_types.predicate Cil.visitAction
          method vpredicate_named :
            Cil_types.predicate Cil_types.named ->
            Cil_types.predicate Cil_types.named Cil.visitAction
          method vquantifiers :
            Cil_types.quantifiers -> Cil_types.quantifiers Cil.visitAction
          method vslice_pragma :
            Cil_types.term Cil_types.slice_pragma ->
            Cil_types.term Cil_types.slice_pragma Cil.visitAction
          method vspec :
            Cil_types.funspec -> Cil_types.funspec Cil.visitAction
          method vstmt : Cil_types.stmt -> Cil_types.stmt Cil.visitAction
          method vterm : Cil_types.term -> Cil_types.term Cil.visitAction
          method vterm_lhost :
            Cil_types.term_lhost -> Cil_types.term_lhost Cil.visitAction
          method vterm_lval :
            Cil_types.term_lval -> Cil_types.term_lval Cil.visitAction
          method vterm_node :
            Cil_types.term_node -> Cil_types.term_node Cil.visitAction
          method vterm_offset :
            Cil_types.term_offset -> Cil_types.term_offset Cil.visitAction
          method vtype : Cil_types.typ -> Cil_types.typ Cil.visitAction
          method vvdec :
            Cil_types.varinfo -> Cil_types.varinfo Cil.visitAction
          method vvrbl :
            Cil_types.varinfo -> Cil_types.varinfo Cil.visitAction
        end
      val null_adder : Cil_types.fundec -> Cil_types.stmt list
      val computeLiveness : Cil_types.fundec -> unit
      val getLiveSet : Cil_types.stmt -> LiveFlow.StmtStartData.data option
      val print_everything : unit -> unit
      val match_label : Cil_types.label -> bool
      class doFeatureClass :
        object
          method behavior : Cil.visitor_behavior
          method current_func : Cil_types.fundec option
          method current_kinstr : Cil_types.kinstr
          method current_stmt : Cil_types.stmt option
          method fill_global_tables : unit
          method get_filling_actions : (unit -> unit) Queue.t
          method plain_copy_visitor : Cil.cilVisitor
          method pop_stmt : Cil_types.stmt -> unit
          method project : Project.t option
          method push_stmt : Cil_types.stmt -> unit
          method queueInstr : Cil_types.instr list -> unit
          method reset_current_func : unit -> unit
          method set_current_func : Cil_types.fundec -> unit
          method unqueueInstr : unit -> Cil_types.instr list
          method vallocates :
            Cil_types.identified_term list ->
            Cil_types.identified_term list Cil.visitAction
          method vallocation :
            Cil_types.identified_term Cil_types.allocation ->
            Cil_types.identified_term Cil_types.allocation Cil.visitAction
          method vannotation :
            Cil_types.global_annotation ->
            Cil_types.global_annotation Cil.visitAction
          method vassigns :
            Cil_types.identified_term Cil_types.assigns ->
            Cil_types.identified_term Cil_types.assigns Cil.visitAction
          method vattr :
            Cil_types.attribute -> Cil_types.attribute list Cil.visitAction
          method vattrparam :
            Cil_types.attrparam -> Cil_types.attrparam Cil.visitAction
          method vbehavior :
            Cil_types.funbehavior -> Cil_types.funbehavior Cil.visitAction
          method vblock : Cil_types.block -> Cil_types.block Cil.visitAction
          method vcode_annot :
            Cil_types.code_annotation ->
            Cil_types.code_annotation Cil.visitAction
          method vcompinfo :
            Cil_types.compinfo -> Cil_types.compinfo Cil.visitAction
          method vdeps :
            Cil_types.identified_term Cil_types.deps ->
            Cil_types.identified_term Cil_types.deps Cil.visitAction
          method venuminfo :
            Cil_types.enuminfo -> Cil_types.enuminfo Cil.visitAction
          method venumitem :
            Cil_types.enumitem -> Cil_types.enumitem Cil.visitAction
          method vexpr : Cil_types.exp -> Cil_types.exp Cil.visitAction
          method vfieldinfo :
            Cil_types.fieldinfo -> Cil_types.fieldinfo Cil.visitAction
          method vfile : Cil_types.file -> Cil_types.file Cil.visitAction
          method vfrees :
            Cil_types.identified_term list ->
            Cil_types.identified_term list Cil.visitAction
          method vfrom :
            Cil_types.identified_term Cil_types.from ->
            Cil_types.identified_term Cil_types.from Cil.visitAction
          method vfunc : Cil_types.fundec -> Cil_types.fundec Cil.visitAction
          method vglob :
            Cil_types.global -> Cil_types.global list Cil.visitAction
          method videntified_predicate :
            Cil_types.identified_predicate ->
            Cil_types.identified_predicate Cil.visitAction
          method videntified_term :
            Cil_types.identified_term ->
            Cil_types.identified_term Cil.visitAction
          method vimpact_pragma :
            Cil_types.term Cil_types.impact_pragma ->
            Cil_types.term Cil_types.impact_pragma Cil.visitAction
          method vinit :
            Cil_types.varinfo ->
            Cil_types.offset ->
            Cil_types.init -> Cil_types.init Cil.visitAction
          method vinitoffs :
            Cil_types.offset -> Cil_types.offset Cil.visitAction
          method vinst :
            Cil_types.instr -> Cil_types.instr list Cil.visitAction
          method vlogic_ctor_info_decl :
            Cil_types.logic_ctor_info ->
            Cil_types.logic_ctor_info Cil.visitAction
          method vlogic_ctor_info_use :
            Cil_types.logic_ctor_info ->
            Cil_types.logic_ctor_info Cil.visitAction
          method vlogic_info_decl :
            Cil_types.logic_info -> Cil_types.logic_info Cil.visitAction
          method vlogic_info_use :
            Cil_types.logic_info -> Cil_types.logic_info Cil.visitAction
          method vlogic_label :
            Cil_types.logic_label -> Cil_types.logic_label Cil.visitAction
          method vlogic_type :
            Cil_types.logic_type -> Cil_types.logic_type Cil.visitAction
          method vlogic_type_def :
            Cil_types.logic_type_def ->
            Cil_types.logic_type_def Cil.visitAction
          method vlogic_type_info_decl :
            Cil_types.logic_type_info ->
            Cil_types.logic_type_info Cil.visitAction
          method vlogic_type_info_use :
            Cil_types.logic_type_info ->
            Cil_types.logic_type_info Cil.visitAction
          method vlogic_var_decl :
            Cil_types.logic_var -> Cil_types.logic_var Cil.visitAction
          method vlogic_var_use :
            Cil_types.logic_var -> Cil_types.logic_var Cil.visitAction
          method vloop_pragma :
            Cil_types.term Cil_types.loop_pragma ->
            Cil_types.term Cil_types.loop_pragma Cil.visitAction
          method vlval : Cil_types.lval -> Cil_types.lval Cil.visitAction
          method vmodel_info :
            Cil_types.model_info -> Cil_types.model_info Cil.visitAction
          method voffs : Cil_types.offset -> Cil_types.offset Cil.visitAction
          method vpredicate :
            Cil_types.predicate -> Cil_types.predicate Cil.visitAction
          method vpredicate_named :
            Cil_types.predicate Cil_types.named ->
            Cil_types.predicate Cil_types.named Cil.visitAction
          method vquantifiers :
            Cil_types.quantifiers -> Cil_types.quantifiers Cil.visitAction
          method vslice_pragma :
            Cil_types.term Cil_types.slice_pragma ->
            Cil_types.term Cil_types.slice_pragma Cil.visitAction
          method vspec :
            Cil_types.funspec -> Cil_types.funspec Cil.visitAction
          method vstmt : Cil_types.stmt -> Cil_types.stmt Cil.visitAction
          method vterm : Cil_types.term -> Cil_types.term Cil.visitAction
          method vterm_lhost :
            Cil_types.term_lhost -> Cil_types.term_lhost Cil.visitAction
          method vterm_lval :
            Cil_types.term_lval -> Cil_types.term_lval Cil.visitAction
          method vterm_node :
            Cil_types.term_node -> Cil_types.term_node Cil.visitAction
          method vterm_offset :
            Cil_types.term_offset -> Cil_types.term_offset Cil.visitAction
          method vtype : Cil_types.typ -> Cil_types.typ Cil.visitAction
          method vvdec :
            Cil_types.varinfo -> Cil_types.varinfo Cil.visitAction
          method vvrbl :
            Cil_types.varinfo -> Cil_types.varinfo Cil.visitAction
        end
      val do_live_feature : Cil_types.file -> unit
      val feature : Cil.featureDescr
    end
  module IH :
    sig
      type key = Datatype.Int.t
      type 'a t = 'Datatype.Int.Hashtbl.t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val reset : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
      val stats : 'a t -> Hashtbl.statistics
      val iter_sorted :
        ?cmp:(key -> key -> int) -> (key -> '-> unit) -> 'a t -> unit
      val fold_sorted :
        ?cmp:(key -> key -> int) ->
        (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val iter_sorted_by_entry :
        cmp:(key * '-> key * '-> int) ->
        (key -> '-> unit) -> 'a t -> unit
      val fold_sorted_by_entry :
        cmp:(key * '-> key * '-> int) ->
        (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val iter_sorted_by_value :
        cmp:('-> '-> int) -> (key -> '-> unit) -> 'a t -> unit
      val fold_sorted_by_value :
        cmp:('-> '-> int) -> (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val structural_descr : Structural_descr.t -> Structural_descr.t
      val make_type : 'Type.t -> 'a t Type.t
      val memo : 'a t -> key -> (key -> 'a) -> 'a
      module Key :
        sig
          type t = key
          val ty : t Type.t
          val name : string
          val descr : t Descr.t
          val packed_descr : Structural_descr.pack
          val reprs : t list
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val hash : t -> int
          val pretty_code : Format.formatter -> t -> unit
          val internal_pretty_code :
            Type.precedence -> Format.formatter -> t -> unit
          val pretty : Format.formatter -> t -> unit
          val varname : t -> string
          val mem_project : (Project_skeleton.t -> bool) -> t -> bool
          val copy : t -> t
        end
      module Make :
        functor (Data : Datatype.S->
          sig
            type t = Data.t t
            val ty : t Type.t
            val name : string
            val descr : t Descr.t
            val packed_descr : Structural_descr.pack
            val reprs : t list
            val equal : t -> t -> bool
            val compare : t -> t -> int
            val hash : t -> int
            val pretty_code : Format.formatter -> t -> unit
            val internal_pretty_code :
              Type.precedence -> Format.formatter -> t -> unit
            val pretty : Format.formatter -> t -> unit
            val varname : t -> string
            val mem_project : (Project_skeleton.t -> bool) -> t -> bool
            val copy : t -> t
          end
    end
  val debug_fn : String.t ref
  module IOS :
    sig
      type elt = int option
      type t = Reachingdefs.IOS.t
      val empty : t
      val is_empty : t -> bool
      val mem : elt -> t -> bool
      val add : elt -> t -> t
      val singleton : elt -> t
      val remove : elt -> t -> t
      val union : t -> t -> t
      val inter : t -> t -> t
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val choose : t -> elt
      val split : elt -> t -> t * bool * t
      val find : elt -> t -> elt
      val of_list : elt list -> t
      val min_elt : t -> elt
      val max_elt : t -> elt
      val nearest_elt_le : elt -> t -> elt
      val nearest_elt_ge : elt -> t -> elt
    end
  val debug : bool ref
  val ih_inter : 'IH.t -> 'IH.t -> 'IH.t
  val ih_union : 'IH.t -> 'IH.t -> 'IH.t
  val iosh_singleton_lookup : IOS.t IH.t -> Cil_types.varinfo -> IOS.elt
  val iosh_lookup : 'IH.t -> Cil_types.varinfo -> 'a option
  val iosh_defId_find : IOS.t IH.t -> int -> IH.key option
  val iosh_combine : IOS.t IH.t -> IOS.t IH.t -> IOS.t IH.t
  val iosh_equals : IOS.t IH.t -> IOS.t IH.t -> bool
  val iosh_replace : IOS.t IH.t -> int -> Cil_types.varinfo -> unit
  val iosh_filter_dead : 'IH.t -> UD.VS.t -> unit
  val proc_defs : UD.VS.t -> IOS.t IH.t -> (unit -> int) -> unit
  val idMaker : unit -> int -> unit -> int
  val iRDsHtbl : (int * bool, (unit * int * IOS.t IH.t) list) Hashtbl.t
  val instrRDs :
    Cil_types.instr ->
    int -> 'a * int * IOS.t IH.t -> bool -> (unit * int * IOS.t IH.t) list
  type rhs =
    Reachingdefs.rhs =
      RDExp of Cil_types.exp
    | RDCall of Cil_types.instr
  module ReachingDef :
    sig
      val name : string
      val debug : bool
      val mayReach : bool ref
      type t = unit * int * IOS.t IH.t
      module StmtStartData :
        sig
          type data = unit * int * IOS.t IH.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
      val copy :
        'a * 'b * 'Datatype.Int.Hashtbl.t ->
        unit * 'b * 'Datatype.Int.Hashtbl.t
      val defIdStmtHash : Cil_types.stmt Datatype.Int.Hashtbl.t
      val sidStmtHash : Cil_types.stmt Datatype.Int.Hashtbl.t
      val pretty : '-> '-> unit
      val nextDefId : int ref
      val num_defs : Cil_types.stmt -> int
      val computeFirstPredecessor :
        Cil_types.stmt ->
        'a * int * 'Datatype.Int.Hashtbl.t ->
        unit * int * 'Datatype.Int.Hashtbl.t
      val combinePredecessors :
        Cil_types.stmt -> old:t -> t -> (unit * int * IOS.t IH.t) option
      val doInstr :
        '->
        Cil_types.instr -> 'b * int * IOS.t IH.t -> unit * int * IOS.t IH.t
      val doStmt : Cil_types.stmt -> 'a * 'b * 'IH.t -> 'DF.stmtaction
      val doGuard : '-> '-> '-> 'DF.guardaction * 'DF.guardaction
      val doEdge : '-> '-> '-> 'c
    end
  module RD : sig val compute : Cil_types.stmt list -> unit end
  val rhsHtbl : (rhs * int * IOS.t IH.t) option IH.t
  val getDefRhs :
    Cil_types.stmt IH.t -> IH.key -> (rhs * int * IOS.t IH.t) option
  val prettyprint : '-> '-> '-> unit -> 'd * 'e * '-> unit
  val iosh_none_fill : IOS.t IH.t -> Cil_types.varinfo list -> unit
  val clearMemos : unit -> unit
  val computeRDs : Cil_types.fundec -> unit
  val getRDs : Cil_types.stmt -> ReachingDef.StmtStartData.data option
  val getDefIdStmt : IH.key -> Cil_types.stmt option
  val getStmt : IH.key -> Cil_types.stmt option
  val getSimpRhs : IH.key -> rhs option
  val isDefInstr : Cil_datatype.Instr.t -> IH.key -> bool
  class rdVisitorClass :
    object
      val mutable cur_rd_dat : (unit * int * IOS.t IH.t) option
      val mutable rd_dat_lst : (unit * int * IOS.t IH.t) list
      method behavior : Cil.visitor_behavior
      method current_func : Cil_types.fundec option
      method current_kinstr : Cil_types.kinstr
      method current_stmt : Cil_types.stmt option
      method fill_global_tables : unit
      method get_cur_iosh : unit -> IOS.t IH.t option
      method get_filling_actions : (unit -> unit) Queue.t
      method plain_copy_visitor : Cil.cilVisitor
      method pop_stmt : Cil_types.stmt -> unit
      method project : Project.t option
      method push_stmt : Cil_types.stmt -> unit
      method queueInstr : Cil_types.instr list -> unit
      method reset_current_func : unit -> unit
      method set_current_func : Cil_types.fundec -> unit
      method unqueueInstr : unit -> Cil_types.instr list
      method vallocates :
        Cil_types.identified_term list ->
        Cil_types.identified_term list Cil.visitAction
      method vallocation :
        Cil_types.identified_term Cil_types.allocation ->
        Cil_types.identified_term Cil_types.allocation Cil.visitAction
      method vannotation :
        Cil_types.global_annotation ->
        Cil_types.global_annotation Cil.visitAction
      method vassigns :
        Cil_types.identified_term Cil_types.assigns ->
        Cil_types.identified_term Cil_types.assigns Cil.visitAction
      method vattr :
        Cil_types.attribute -> Cil_types.attribute list Cil.visitAction
      method vattrparam :
        Cil_types.attrparam -> Cil_types.attrparam Cil.visitAction
      method vbehavior :
        Cil_types.funbehavior -> Cil_types.funbehavior Cil.visitAction
      method vblock : Cil_types.block -> Cil_types.block Cil.visitAction
      method vcode_annot :
        Cil_types.code_annotation ->
        Cil_types.code_annotation Cil.visitAction
      method vcompinfo :
        Cil_types.compinfo -> Cil_types.compinfo Cil.visitAction
      method vdeps :
        Cil_types.identified_term Cil_types.deps ->
        Cil_types.identified_term Cil_types.deps Cil.visitAction
      method venuminfo :
        Cil_types.enuminfo -> Cil_types.enuminfo Cil.visitAction
      method venumitem :
        Cil_types.enumitem -> Cil_types.enumitem Cil.visitAction
      method vexpr : Cil_types.exp -> Cil_types.exp Cil.visitAction
      method vfieldinfo :
        Cil_types.fieldinfo -> Cil_types.fieldinfo Cil.visitAction
      method vfile : Cil_types.file -> Cil_types.file Cil.visitAction
      method vfrees :
        Cil_types.identified_term list ->
        Cil_types.identified_term list Cil.visitAction
      method vfrom :
        Cil_types.identified_term Cil_types.from ->
        Cil_types.identified_term Cil_types.from Cil.visitAction
      method vfunc : Cil_types.fundec -> Cil_types.fundec Cil.visitAction
      method vglob :
        Cil_types.global -> Cil_types.global list Cil.visitAction
      method videntified_predicate :
        Cil_types.identified_predicate ->
        Cil_types.identified_predicate Cil.visitAction
      method videntified_term :
        Cil_types.identified_term ->
        Cil_types.identified_term Cil.visitAction
      method vimpact_pragma :
        Cil_types.term Cil_types.impact_pragma ->
        Cil_types.term Cil_types.impact_pragma Cil.visitAction
      method vinit :
        Cil_types.varinfo ->
        Cil_types.offset -> Cil_types.init -> Cil_types.init Cil.visitAction
      method vinitoffs : Cil_types.offset -> Cil_types.offset Cil.visitAction
      method vinst : Cil_types.instr -> Cil_types.instr list Cil.visitAction
      method vlogic_ctor_info_decl :
        Cil_types.logic_ctor_info ->
        Cil_types.logic_ctor_info Cil.visitAction
      method vlogic_ctor_info_use :
        Cil_types.logic_ctor_info ->
        Cil_types.logic_ctor_info Cil.visitAction
      method vlogic_info_decl :
        Cil_types.logic_info -> Cil_types.logic_info Cil.visitAction
      method vlogic_info_use :
        Cil_types.logic_info -> Cil_types.logic_info Cil.visitAction
      method vlogic_label :
        Cil_types.logic_label -> Cil_types.logic_label Cil.visitAction
      method vlogic_type :
        Cil_types.logic_type -> Cil_types.logic_type Cil.visitAction
      method vlogic_type_def :
        Cil_types.logic_type_def -> Cil_types.logic_type_def Cil.visitAction
      method vlogic_type_info_decl :
        Cil_types.logic_type_info ->
        Cil_types.logic_type_info Cil.visitAction
      method vlogic_type_info_use :
        Cil_types.logic_type_info ->
        Cil_types.logic_type_info Cil.visitAction
      method vlogic_var_decl :
        Cil_types.logic_var -> Cil_types.logic_var Cil.visitAction
      method vlogic_var_use :
        Cil_types.logic_var -> Cil_types.logic_var Cil.visitAction
      method vloop_pragma :
        Cil_types.term Cil_types.loop_pragma ->
        Cil_types.term Cil_types.loop_pragma Cil.visitAction
      method vlval : Cil_types.lval -> Cil_types.lval Cil.visitAction
      method vmodel_info :
        Cil_types.model_info -> Cil_types.model_info Cil.visitAction
      method voffs : Cil_types.offset -> Cil_types.offset Cil.visitAction
      method vpredicate :
        Cil_types.predicate -> Cil_types.predicate Cil.visitAction
      method vpredicate_named :
        Cil_types.predicate Cil_types.named ->
        Cil_types.predicate Cil_types.named Cil.visitAction
      method vquantifiers :
        Cil_types.quantifiers -> Cil_types.quantifiers Cil.visitAction
      method vslice_pragma :
        Cil_types.term Cil_types.slice_pragma ->
        Cil_types.term Cil_types.slice_pragma Cil.visitAction
      method vspec : Cil_types.funspec -> Cil_types.funspec Cil.visitAction
      method vstmt : Cil_types.stmt -> Cil_types.stmt Cil.visitAction
      method vterm : Cil_types.term -> Cil_types.term Cil.visitAction
      method vterm_lhost :
        Cil_types.term_lhost -> Cil_types.term_lhost Cil.visitAction
      method vterm_lval :
        Cil_types.term_lval -> Cil_types.term_lval Cil.visitAction
      method vterm_node :
        Cil_types.term_node -> Cil_types.term_node Cil.visitAction
      method vterm_offset :
        Cil_types.term_offset -> Cil_types.term_offset Cil.visitAction
      method vtype : Cil_types.typ -> Cil_types.typ Cil.visitAction
      method vvdec : Cil_types.varinfo -> Cil_types.varinfo Cil.visitAction
      method vvrbl : Cil_types.varinfo -> Cil_types.varinfo Cil.visitAction
    end
end