let prepare_guard lval p =
      try
        let ptrs = get_read_addr (not (direct_lval lval)) p  in
        debug3 "[get_read_addr] = %a"
          (Pretty_utils.pp_list  ~sep:", " F.pp_data) ptrs;
        let add_p g p =
          let keep_p = if F.eq_data lval p then false else true in
          if keep_p then F.p_and (disj lval p) g else g
        in List.fold_left add_p F.p_true ptrs
      with Wp_error.Error(model, msg) ->
        Wp_parameters.warning
          "Failed to compute guard in %s model because %s." model msg;
        D.dummy()