let marks_for_caller_inputs pdg_caller old_marks call to_prop fi_to_call =
    assert (not (PdgTypes.Pdg.is_top pdg_caller));
    let in_info, _ = to_prop in
    let new_input = ref false in
    let m2m s m =
      let key = match s with
        | PdgMarks.SelIn loc -> PdgIndex.Key.implicit_in_key loc
        | PdgMarks.SelNode (n,_) -> !Db.Pdg.node_key n
      in
      let old_m = get_mark old_marks key in
      let new_m = Marks.missing_input_mark ~call:old_m ~called:m in
        SlicingParameters.debug ~level:2 "[Fct_Slice.FctMarks.marks_for_caller_inputs] for %a : old=%a new=%a -> %a"
            !Db.Pdg.pretty_key key Marks.pretty_mark old_m Marks.pretty_mark m
            Marks.pretty_mark
            (match new_m with None -> Marks.bottom_mark | Some m -> m);
      let _ = match new_m with
        | Some _new_m when Marks.is_bottom_mark old_m ->
            let init_m = get_fi_node_mark fi_to_call key in
              if Marks.is_bottom_mark init_m then new_input := true
        | _ -> ()
      in new_m
    in
    let new_input_marks =
      Pdg.Register.in_marks_to_caller pdg_caller call m2m in_info in
    new_input_marks, !new_input