let process_call_args data called_kf stmt args =
  let param_list = Kernel_function.get_formals called_kf in
  let asgn_arg_to_param data param arg =
    let param_zone = Data.var_zone param in
    let arg_dpds = Data.exp_zone stmt arg in
    let exact = true in (* param is always a variable so asgn is exact *)
    let _used, data =
      compute_new_data data param_zone Data.bottom exact arg_dpds in
      (* can ignore 'used' because if we need param, we already know that the
      * call is needed *)

      data
  in
  let rec do_param_arg data param_list args =
    match param_list, args with
      | [], [] -> data
      | p :: param_list, a :: args ->
          let data = asgn_arg_to_param data p a in
            do_param_arg data param_list args
      | [], _ -> (* call to a variadic function *)
          (* warning already sent during 'from' computation. *)
          (* TODO : merge the remaining args in data ?... *)
          data
      | _, [] -> R.abort "call to a function with to few arguments"
  in do_param_arg data param_list args