let print_crit fmt crit =
  match crit with
  | T.CrFct fct_crit ->
      let fct = fct_crit.T.cf_fct in
      let name = SlicingMacros.f_name fct in
      Format.fprintf fmt "[%s = " name;
    let _ = match fct_crit.T.cf_info with
      | T.CcUserMark info -> print_f_crit fmt info
      | T.CcMissingInputs (call, _input_marks, more_inputs)
        -> Format.fprintf fmt "missing_inputs for call %d (%s)"
             call.Cil_types.sid
             (if more_inputs then "more_inputs" else "marks only")
      | T.CcMissingOutputs (call, _output_marks, more_outputs)
        -> Format.fprintf fmt "missing_outputs for call %d (%s)"
             call.Cil_types.sid
             (if more_outputs then "more_outputs" else "marks only")
      | T.CcChooseCall call
        -> Format.fprintf fmt "choose_call for call %d" call.Cil_types.sid
      | T.CcChangeCall (call,f)
        -> let fname = match f with
          | T.CallSlice ff -> SlicingMacros.ff_name ff
          | T.CallSrc (Some fi) -> ("(src:"^( SlicingMacros.fi_name fi)^")")
          | T.CallSrc None -> "(src)"
        in Format.fprintf fmt "change_call for call %d -> %s"
             call.Cil_types.sid fname
      | T.CcPropagate nl ->
          Format.fprintf fmt "propagate %a"
            print_sel_marks_list nl
      | T.CcExamineCalls _ -> Format.fprintf fmt "examine_calls"
    in Format.fprintf fmt "]"
  | T.CrAppli (T.CaCall fi) ->
      let name = SlicingMacros.fi_name fi in
      Format.fprintf fmt "[Appli : calls to %s]" name
  | _ ->
      Extlib.not_yet_implemented "Printing this slicing criterion "