let one_step_related_nodes kind pdg node =
    (* do not consider address dependencies now (except for impact analysis):
       just consider them during the last slicing pass
       (for semantic preservation of pointers) *)

    let direct node = !Pdg.direct_data_dpds pdg node in
    match kind with
    | Direct -> direct node
    | Indirect_Backward -> direct node @ !Pdg.direct_ctrl_dpds pdg node
    | Forward Security ->
        !Pdg.direct_data_uses pdg node @ !Pdg.direct_ctrl_uses pdg node
    | Forward Impact ->
        !Pdg.direct_data_uses pdg node @ !Pdg.direct_ctrl_uses pdg node
        @ !Pdg.direct_addr_uses pdg node