let in_marks_to_caller pdg call m2m ?(rqs=[]) in_marks =
  let add_n_m acc n _z_opt m =
    let select = PdgMarks.mk_select_node ~z_opt:None n in
    match m2m select m with
      | None -> acc
      | Some m -> PdgMarks.add_to_select acc select m
  in
  let build rqs (in_key, m) =
    match in_key with
      | Signature.InCtrl ->
          add_n_m rqs (!Db.Pdg.find_call_ctrl_node pdg call) None m
      | Signature.InNum in_num ->
          add_n_m rqs (!Db.Pdg.find_call_input_node pdg call in_num) None m
      | Signature.InImpl zone ->
          let nodes, undef =
            !Db.Pdg.find_location_nodes_at_stmt pdg call ~before:true zone
          in
          let rqs =
            List.fold_left (fun acc (n,z) -> add_n_m acc n z m) rqs nodes in
          let rqs = match undef with None -> rqs
            | Some z ->
               match m2m (PdgMarks.mk_select_undef_zone z) m with None -> rqs
                 | Some m -> PdgMarks.add_undef_in_to_select rqs undef m
          in rqs
  in List.fold_left build rqs in_marks