sig
  type t
  val get : Kernel_function.t -> Cil2cfg.t
  type node
  val pp_node : Format.formatter -> Cil2cfg.node -> unit
  val same_node : Cil2cfg.node -> Cil2cfg.node -> bool
  type edge
  val pp_edge : Format.formatter -> Cil2cfg.edge -> unit
  val same_edge : Cil2cfg.edge -> Cil2cfg.edge -> bool
  val start_edge : Cil2cfg.t -> Cil2cfg.edge
  module Eset :
    sig
      type elt = edge
      type 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 find : elt -> t -> elt
      val of_list : elt list -> t
      val min_elt : t -> elt
      val max_elt : t -> elt
      val split : elt -> t -> t * bool * t
      val nearest_elt_le : elt -> t -> elt
      val nearest_elt_ge : elt -> t -> elt
    end
  val edge_src : Cil2cfg.edge -> Cil2cfg.node
  val edge_dst : Cil2cfg.edge -> Cil2cfg.node
  val pred_e : Cil2cfg.t -> Cil2cfg.node -> Cil2cfg.edge list
  val succ_e : Cil2cfg.t -> Cil2cfg.node -> Cil2cfg.edge list
  val fold_nodes : (Cil2cfg.node -> '-> 'a) -> Cil2cfg.t -> '-> 'a
  val iter_nodes : (Cil2cfg.node -> unit) -> Cil2cfg.t -> unit
  val iter_edges : (Cil2cfg.edge -> unit) -> Cil2cfg.t -> unit
  type block_type = private
      Bstmt of Cil_types.stmt
    | Bthen of Cil_types.stmt
    | Belse of Cil_types.stmt
    | Bloop of Cil_types.stmt
    | Bfct
  type call_type =
      Dynamic of Cil_types.exp
    | Static of Cil_types.kernel_function
  val pp_call_type : Format.formatter -> Cil2cfg.call_type -> unit
  val get_call_type : Cil_types.exp -> Cil2cfg.call_type
  type node_type = private
      Vstart
    | Vend
    | Vexit
    | VfctIn
    | VfctOut
    | VblkIn of Cil2cfg.block_type * Cil_types.block
    | VblkOut of Cil2cfg.block_type * Cil_types.block
    | Vstmt of Cil_types.stmt
    | Vcall of Cil_types.stmt * Cil_types.lval option * Cil2cfg.call_type *
        Cil_types.exp list
    | Vtest of bool * Cil_types.stmt * Cil_types.exp
    | Vswitch of Cil_types.stmt * Cil_types.exp
    | Vloop of bool option * Cil_types.stmt
    | Vloop2 of bool * int
  val node_type : Cil2cfg.node -> Cil2cfg.node_type
  val pp_node_type : Format.formatter -> Cil2cfg.node_type -> unit
  val node_stmt_opt : Cil2cfg.node -> Cil_types.stmt option
  val start_stmt_of_node : Cil2cfg.node -> Cil_types.stmt option
  val unreachable_nodes : Cil2cfg.t -> Cil2cfg.node_type list
  val get_test_edges :
    Cil2cfg.t -> Cil2cfg.node -> Cil2cfg.edge * Cil2cfg.edge
  val get_switch_edges :
    Cil2cfg.t ->
    Cil2cfg.node -> (Cil_types.exp list * Cil2cfg.edge) list * Cil2cfg.edge
  val get_call_out_edges :
    Cil2cfg.t -> Cil2cfg.node -> Cil2cfg.edge * Cil2cfg.edge
  val blocks_closed_by_edge :
    Cil2cfg.t -> Cil2cfg.edge -> Cil_types.block list
  val is_back_edge : Cil2cfg.edge -> bool
  val strange_loops : Cil2cfg.t -> Cil2cfg.node list
  val very_strange_loops : Cil2cfg.t -> Cil2cfg.node list
  val get_edge_labels : Cil2cfg.edge -> Clabels.c_label list
  val get_edge_stmt : Cil2cfg.edge -> Cil_types.stmt option
  val get_edge_next_stmt : Cil2cfg.t -> Cil2cfg.edge -> Cil_types.stmt option
  val has_exit : Cil2cfg.t -> bool
  val get_pre_edges : Cil2cfg.t -> Cil2cfg.node -> Cil2cfg.edge list
  val get_post_edges : Cil2cfg.t -> Cil2cfg.node -> Cil2cfg.edge list
  val get_post_label : Cil2cfg.t -> Cil2cfg.node -> Clabels.c_label option
  val get_exit_edges : Cil2cfg.t -> Cil2cfg.node -> Cil2cfg.edge list
  val get_internal_edges :
    Cil2cfg.t -> Cil2cfg.node -> Cil2cfg.edge list * Cil2cfg.Eset.t
  val cfg_kf : Cil2cfg.t -> Kernel_function.t
  val cfg_spec_only : Cil2cfg.t -> bool
  module type HEsig =
    sig
      type ti
      type t
      val create : int -> Cil2cfg.HEsig.t
      val find : Cil2cfg.HEsig.t -> Cil2cfg.edge -> Cil2cfg.HEsig.ti
      val find_all : Cil2cfg.HEsig.t -> Cil2cfg.edge -> Cil2cfg.HEsig.ti list
      val add : Cil2cfg.HEsig.t -> Cil2cfg.edge -> Cil2cfg.HEsig.ti -> unit
      val replace :
        Cil2cfg.HEsig.t -> Cil2cfg.edge -> Cil2cfg.HEsig.ti -> unit
      val remove : Cil2cfg.HEsig.t -> Cil2cfg.edge -> unit
      val clear : Cil2cfg.HEsig.t -> unit
    end
  module HE :
    functor (I : sig type t end->
      sig
        type ti = I.t
        type t
        val create : int -> t
        val find : t -> edge -> ti
        val find_all : t -> edge -> ti list
        val add : t -> edge -> ti -> unit
        val replace : t -> edge -> ti -> unit
        val remove : t -> edge -> unit
        val clear : t -> unit
      end
end