sig
  module Api :
    sig
      val self : State.t
      val set_modes :
        ?calls:int ->
        ?callers:bool ->
        ?sliceUndef:bool -> ?keepAnnotations:bool -> unit -> unit
      module Project :
        sig
          val reset_slicing : unit -> unit
          val is_called : Cil_types.kernel_function -> bool
          val has_persistent_selection : Cil_types.kernel_function -> bool
          val change_slicing_level : Cil_types.kernel_function -> int -> unit
          val default_slice_names :
            Cil_types.kernel_function -> bool -> int -> string
          val extract :
            ?f_slice_names:(Cil_types.kernel_function ->
                            bool -> int -> string) ->
            string -> Project.t
          val is_directly_called_internal : Cil_types.kernel_function -> bool
          val print_dot : filename:string -> title:string -> unit
          val pretty : Stdlib.Format.formatter -> unit
        end
      module Mark :
        sig
          type t
          val dyn_t : Slicing.Api.Mark.t Type.t
          val make :
            data:bool -> addr:bool -> ctrl:bool -> Slicing.Api.Mark.t
          val compare : Slicing.Api.Mark.t -> Slicing.Api.Mark.t -> int
          val is_bottom : Slicing.Api.Mark.t -> bool
          val is_spare : Slicing.Api.Mark.t -> bool
          val is_data : Slicing.Api.Mark.t -> bool
          val is_ctrl : Slicing.Api.Mark.t -> bool
          val is_addr : Slicing.Api.Mark.t -> bool
          val get_from_src_func :
            Cil_types.kernel_function -> Slicing.Api.Mark.t
          val pretty : Stdlib.Format.formatter -> Slicing.Api.Mark.t -> unit
        end
      module Select :
        sig
          type t
          val dyn_t : Slicing.Api.Select.t Type.t
          type set
          val dyn_set : Slicing.Api.Select.set Type.t
          val empty_selects : Slicing.Api.Select.set
          val select_stmt :
            Slicing.Api.Select.set ->
            spare:bool ->
            Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_stmt_ctrl :
            Slicing.Api.Select.set ->
            spare:bool ->
            Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_stmt_lval_rw :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            rd:Datatype.String.Set.t ->
            wr:Datatype.String.Set.t ->
            Cil_types.stmt ->
            eval:Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_stmt_lval :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            Datatype.String.Set.t ->
            before:bool ->
            Cil_types.stmt ->
            eval:Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_stmt_annots :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            spare:bool ->
            threat:bool ->
            user_assert:bool ->
            slicing_pragma:bool ->
            loop_inv:bool ->
            loop_var:bool ->
            Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_func_lval_rw :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            rd:Datatype.String.Set.t ->
            wr:Datatype.String.Set.t ->
            eval:Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_func_lval :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            Datatype.String.Set.t ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_func_return :
            Slicing.Api.Select.set ->
            spare:bool -> Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_func_calls_to :
            Slicing.Api.Select.set ->
            spare:bool -> Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_func_calls_into :
            Slicing.Api.Select.set ->
            spare:bool -> Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_func_annots :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            spare:bool ->
            threat:bool ->
            user_assert:bool ->
            slicing_pragma:bool ->
            loop_inv:bool ->
            loop_var:bool ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_func_zone :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            Locations.Zone.t ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_stmt_zone :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            Locations.Zone.t ->
            before:bool ->
            Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_stmt_term :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            Cil_types.term ->
            Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_stmt_pred :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            Cil_types.predicate ->
            Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_stmt_annot :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            spare:bool ->
            Cil_types.code_annotation ->
            Cil_types.stmt ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val select_pdg_nodes :
            Slicing.Api.Select.set ->
            Slicing.Api.Mark.t ->
            PdgTypes.Node.t list ->
            Cil_types.kernel_function -> Slicing.Api.Select.set
          val get_function :
            Slicing.Api.Select.t -> Cil_types.kernel_function
          val merge_internal :
            Slicing.Api.Select.t ->
            Slicing.Api.Select.t -> Slicing.Api.Select.t
          val add_to_selects_internal :
            Slicing.Api.Select.t ->
            Slicing.Api.Select.set -> Slicing.Api.Select.set
          val iter_selects_internal :
            (Slicing.Api.Select.t -> unit) -> Slicing.Api.Select.set -> unit
          val fold_selects_internal :
            ('-> Slicing.Api.Select.t -> 'a) ->
            '-> Slicing.Api.Select.set -> 'a
          val select_stmt_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Cil_types.stmt -> Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_label_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Cil_datatype.Logic_label.t ->
            Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_min_call_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Cil_types.stmt -> Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_stmt_zone_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Cil_types.stmt ->
            before:bool ->
            Locations.Zone.t -> Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_zone_at_entry_point_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Locations.Zone.t -> Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_zone_at_end_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Locations.Zone.t -> Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_modified_output_zone_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Locations.Zone.t -> Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_stmt_ctrl_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Cil_types.stmt -> Slicing.Api.Select.t
          val select_entry_point_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_return_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_decl_var_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            Cil_types.varinfo -> Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val select_pdg_nodes_internal :
            Cil_types.kernel_function ->
            ?select:Slicing.Api.Select.t ->
            PdgTypes.Node.t list ->
            Slicing.Api.Mark.t -> Slicing.Api.Select.t
          val pretty :
            Stdlib.Format.formatter -> Slicing.Api.Select.t -> unit
        end
      module Slice :
        sig
          type t
          val dyn_t : Slicing.Api.Slice.t Type.t
          val create : Cil_types.kernel_function -> Slicing.Api.Slice.t
          val remove : Slicing.Api.Slice.t -> unit
          val remove_uncalled : unit -> unit
          val get_all : Cil_types.kernel_function -> Slicing.Api.Slice.t list
          val get_function : Slicing.Api.Slice.t -> Cil_types.kernel_function
          val get_callers : Slicing.Api.Slice.t -> Slicing.Api.Slice.t list
          val get_called_slice :
            Slicing.Api.Slice.t ->
            Cil_types.stmt -> Slicing.Api.Slice.t option
          val get_called_funcs :
            Slicing.Api.Slice.t ->
            Cil_types.stmt -> Cil_types.kernel_function list
          val get_mark_from_stmt :
            Slicing.Api.Slice.t -> Cil_types.stmt -> Slicing.Api.Mark.t
          val get_mark_from_label :
            Slicing.Api.Slice.t ->
            Cil_types.stmt -> Cil_types.label -> Slicing.Api.Mark.t
          val get_mark_from_local_var :
            Slicing.Api.Slice.t -> Cil_types.varinfo -> Slicing.Api.Mark.t
          val get_mark_from_formal :
            Slicing.Api.Slice.t -> Cil_types.varinfo -> Slicing.Api.Mark.t
          val get_user_mark_from_inputs :
            Slicing.Api.Slice.t -> Slicing.Api.Mark.t
          val get_num_id : Slicing.Api.Slice.t -> int
          val from_num_id :
            Cil_types.kernel_function -> int -> Slicing.Api.Slice.t
          val pretty : Stdlib.Format.formatter -> Slicing.Api.Slice.t -> unit
        end
      module Request :
        sig
          val apply_all : propagate_to_callers:bool -> unit
          val add_selection : Slicing.Api.Select.set -> unit
          val add_persistent_selection : Slicing.Api.Select.set -> unit
          val add_persistent_cmdline : unit -> unit
          val add_slice_selection_internal :
            Slicing.Api.Slice.t -> Slicing.Api.Select.t -> unit
          val add_selection_internal : Slicing.Api.Select.t -> unit
          val add_call_slice :
            caller:Slicing.Api.Slice.t -> to_call:Slicing.Api.Slice.t -> unit
          val add_call_fun :
            caller:Slicing.Api.Slice.t ->
            to_call:Cil_types.kernel_function -> unit
          val add_call_min_fun :
            caller:Slicing.Api.Slice.t ->
            to_call:Cil_types.kernel_function -> unit
          val is_request_empty_internal : unit -> bool
          val apply_all_internal : unit -> unit
          val apply_next_internal : unit -> unit
          val merge_slices :
            Slicing.Api.Slice.t ->
            Slicing.Api.Slice.t -> replace:bool -> Slicing.Api.Slice.t
          val copy_slice : Slicing.Api.Slice.t -> Slicing.Api.Slice.t
          val split_slice : Slicing.Api.Slice.t -> Slicing.Api.Slice.t list
          val propagate_user_marks : unit -> unit
          val pretty : Stdlib.Format.formatter -> unit
        end
    end
  module PrintSlice :
    sig
      val print_fct_stmts :
        Stdlib.Format.formatter -> Cil_types.kernel_function -> unit
    end
end