let rec lift_toffset ty off =
match off with
TIndex(idx1,(TIndex _ as suboff)) ->
let subty = direct_element_type ty in
let siz = array_size subty in
begin match lift_toffset subty suboff with
| TIndex(idx,off) -> TIndex(change_idx idx1 idx siz,off)
| TField _ | TNoOffset -> assert false
end
| TIndex(idx1,TNoOffset) ->
let subty = direct_element_type ty in
if isArrayType subty then
let siz = array_size subty in
TIndex(change_idx idx1 (constant_term locUnknown 0L) siz, TNoOffset)
else off
| TIndex _ | TField _ | TNoOffset -> off