let rec addr_of_data d = match d with
  | D1null | D1addr _ | D1base _ | D1depl _ | D1shift _
    -> unsupported "address of %a" pp_data d
  | D1var (None, _) -> (* logic variable *) raise Not_found
  | D1var (Some (vi, _), v) -> D1addr (vi, tau_of_var v)
  | D1indir p -> p
  | D1proj (s, ch) -> D1depl (addr_of_data s, ch)
  | D1mu (s, _, _) | D1muRange (s, _) -> addr_of_data s
  | D1muI _ | D1muIrange _ -> assert false