> Not quite:
>
> offset_int woffset
> = (wi::to_offset (xoffset)
> + wi::lrshift (wi::to_offset (DECL_FIELD_BIT_OFFSET (field)),
> LOG2_BITS_PER_UNIT));
>
> offset_int is the type that can hold all bit positions, byte positions, byte
> sizes and bit sizes.
Yep, I worked that out in meantime. Now I get:
../../gcc/tree.h: In function �long int int_bit_position(const_tree)�:
../../gcc/tree.h:3890:24: error: �to_offset� is not a member of �wi�
return (wi::lrshift (wi::to_offset (DECL_FIELD_OFFSET (field)),
BITS_PER_UNIT_LOG)
^
>
> One can use wi::to_offset to convert things into it. You can see woffset
> uses to see that various uses to convert back out. The idea is that
> eventually all the code that plays with that concept, could use that type.
> Convert into it sooner, and convert out of it later.
There is quite some code in ipa-devirt, so I will look into updating it as
HOST_WIDE_INT is
not that safe in that case.
Perhaps int_bit_position should be updated to return offset_int and make the
conversion to
HOST_WIDE_INT optionally happen at the caller side?
Honza