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