let process_declarations pdg ~formals ~locals =
    let empty_state = State.empty in

    
    (** 2 new nodes for each formal parameters : one for its declaration, and one for its values. This is because it might be the case that we only need the declaration whatever the value is. Might allow us to do a better slicing of the callers. *)

    let do_param (n, state) v =
      let decl_node = decl_var pdg v in
      let key = Key.param_key n v in
      let new_node = add_elem pdg key in
      add_decl_dpd pdg new_node Dpd.Addr decl_node ;
      let new_state =
        State.add_loc_node state  ~exact:true (var_to_loc v) new_node in
        (n+1, new_state)
    in
    let _next_in_num, new_state =
      List.fold_left do_param (1, empty_state) formals in
      (* set_max_in pdg (next_in_num - 1); *)

    (* local variables *)
    List.iter (fun v -> ignore (decl_var pdg v)) locals;

    new_state