let load_mem mem te loc =
    match te with
      | C_pointer ty -> 
          let cv = Ctypes.object_of ty in
          V_pointer(cv, Addr(addr_of_data (F.e_access mem (addr loc)),cv))
      | C_int i -> 
          V_int(i,int_of_data i (F.e_access mem (addr loc)))
      | C_float f -> 
          V_float(f, float_of_data f (F.e_access mem (addr loc)) )
      | C_comp comp ->
          if comp.cstruct then
            let z = zrange loc (sizeof te) in
            let d = model_access_range mem z in
            V_record(comp,s_of_data comp d)
          else Wp_parameters.not_yet_implemented "load of union"
      | C_array arr ->
          let z = zrange loc  (sizeof te) in
          let d = model_access_range mem z in
          V_array(arr,a_of_data arr d)