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