let store_mem mem te loc v =
    match v with
      | V_int(i,t) -> F.e_update mem (addr loc) (data_of_int i t)
      | V_float(f,t) -> F.e_update mem (addr loc) (data_of_float f t)
      | V_pointer(_,lv) -> F.e_update mem (addr loc) (data_of_addr (addr lv))
      | V_record (comp,r) ->
          let dr = data_of_s comp r in
          let zp = zrange loc (sizeof te) in
          model_update_range mem zp dr
      | V_union _ -> unsupported "union"
      | V_array (arr,r) ->
          let dr = data_of_a arr r in
          let zp = zrange loc  (sizeof te) in
          model_update_range mem zp dr