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