sig
  type t = Db_types.kernel_function
  val compare : Kernel_function.t -> Kernel_function.t -> int
  val equal : Kernel_function.t -> Kernel_function.t -> bool
  val hash : Kernel_function.t -> int
  module Datatype :
    sig
      type t = Db_types.kernel_function
      val descr : Unmarshal.t
      val copy : t -> t
      val name : string
      val register_comparable :
        ?compare:(t -> t -> int) ->
        ?equal:(t -> t -> bool) -> ?hash:(t -> int) -> unit -> unit
      val is_comparable_set : unit -> bool
      val hash : t -> int
      val equal : t -> t -> bool
      val compare : t -> t -> int
      val mem_project : ((Project.project -> bool) -> t -> bool) option ref
    end
  exception No_Statement
  val find_first_stmt : Kernel_function.t -> Cil_types.stmt
  val find_return : Kernel_function.t -> Cil_types.stmt
  val find_label :
    Kernel_function.t -> string -> Cil_types.stmt Pervasives.ref
  val clear_sid_info : unit -> unit
  val find_from_sid : int -> Cil_types.stmt * Kernel_function.t
  val find_enclosing_block : Cil_types.stmt -> Cil_types.block
  val find_all_enclosing_blocks : Cil_types.stmt -> Cil_types.block list
  val blocks_closed_by_edge :
    Cil_types.stmt -> Cil_types.stmt -> Cil_types.block list
  val is_definition : Kernel_function.t -> bool
  val returns_void : Kernel_function.t -> bool
  val dummy : unit -> Kernel_function.t
  val get_vi : Kernel_function.t -> Cil_types.varinfo
  val get_id : Kernel_function.t -> int
  val get_name : Kernel_function.t -> string
  val get_type : Kernel_function.t -> Cil_types.typ
  val get_return_type : Kernel_function.t -> Cil_types.typ
  val get_location : Kernel_function.t -> Cil_types.location
  val get_global : Kernel_function.t -> Cil_types.global
  val get_formals : Kernel_function.t -> Cil_types.varinfo list
  val get_locals : Kernel_function.t -> Cil_types.varinfo list
  exception No_Definition
  val get_definition : Kernel_function.t -> Cil_types.fundec
  val is_formal : Cil_types.varinfo -> Kernel_function.t -> bool
  val get_formal_position : Cil_types.varinfo -> Kernel_function.t -> int
  val is_local : Cil_types.varinfo -> Kernel_function.t -> bool
  val is_formal_or_local : Cil_types.varinfo -> Kernel_function.t -> bool
  val get_spec : Kernel_function.t -> Cil_types.funspec
  val postcondition :
    Kernel_function.t ->
    Cil_types.termination_kind -> Cil_types.predicate Cil_types.named
  val precondition : Kernel_function.t -> Cil_types.predicate Cil_types.named
  val code_annotations :
    Kernel_function.t ->
    (Cil_types.stmt * Db_types.rooted_code_annotation Db_types.before_after)
    list
  val populate_spec : (Kernel_function.t -> unit) Pervasives.ref
  module Make_Table :
    functor (Data : Project.Datatype.S->
      functor (Info : Signature.NAME_SIZE_DPDS->
        sig
          val self : Project.Computation.t
          val select :
            Kind.how ->
            Project.Computation.selection -> Project.Computation.selection
          val depend : Project.Computation.t -> unit
          val name : string
          val mark_as_computed : ?project:Project.project -> unit -> unit
          val is_computed : ?project:Project.project -> unit -> bool
          val do_not_save : unit -> unit
          module Datatype : Project.Datatype.S
          val howto_marshal :
            (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit
          type key = t
          type data = Data.t
          val replace : key -> data -> unit
          val add : key -> data -> unit
          val clear : unit -> unit
          val length : unit -> int
          val iter : (key -> data -> unit) -> unit
          val fold : (key -> data -> '-> 'a) -> '-> 'a
          val memo : ?change:(data -> data) -> (key -> data) -> key -> data
          val find : key -> data
          val find_all : key -> data list
          val unsafe_find : key -> data
          val mem : key -> bool
          val remove : key -> unit
        end
  module Set :
    sig
      type elt = t
      type t
      val descr : Unmarshal.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 elements : t -> elt list
      val union : t -> t -> t
      val inter : t -> t -> t
      val diff : t -> t -> t
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val cardinal : t -> int
      val min_elt : t -> elt
      val contains_single_elt : t -> elt option
      module Datatype :
        sig
          type t = t
          val descr : Unmarshal.t
          val copy : t -> t
          val name : string
          val register_comparable :
            ?compare:(t -> t -> int) ->
            ?equal:(t -> t -> bool) -> ?hash:(t -> int) -> unit -> unit
          val is_comparable_set : unit -> bool
          val hash : t -> int
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val mem_project :
            ((Project.project -> bool) -> t -> bool) option ref
        end
      val pretty : Format.formatter -> Kernel_function.t -> unit
    end
  module Queue :
    sig
      module Datatype :
        sig
          type t = Db_types.kernel_function Queue.t
          val descr : Unmarshal.t
          val copy : t -> t
          val name : string
          val register_comparable :
            ?compare:(t -> t -> int) ->
            ?equal:(t -> t -> bool) -> ?hash:(t -> int) -> unit -> unit
          val is_comparable_set : unit -> bool
          val hash : t -> int
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val mem_project :
            ((Project.project -> bool) -> t -> bool) option ref
        end
    end
  val register_stmt :
    Kernel_function.t -> Cil_types.stmt -> Cil_types.block list -> unit
  val pretty_name : Format.formatter -> Kernel_function.t -> unit
end