let rec memory_offset env ty (dp:data) = function
| TNoOffset -> ty,dp
| TIndex(t,off) ->
let kp = kind_of_data ty dp in
let ki = kind_of t.term_type in
let di = !data_rec env t in
let te = Cil.typeOf_array_elem ty in
let ta = object_of te in
let dq = data_index ta kp dp ki di in
memory_offset env te dq off
| TField(f,off) as offset ->
(match dp with
| Range _ | Set _ | List _ ->
Datalib.Collector.add_warning
~reason:"field access over set of l-values"
"Ignored offset '%a' in assign clause"
!Ast_printer.d_term_offset offset ;
ty, dp
| dp ->
let dq = data_field (kind_of_typ ty) dp f in
memory_offset env f.ftype dq off )