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