*bit_offset is supposed to be relative to *byte_offset then it should
be easy to calculate it without another get_inner_reference.
Since, as you suggested, we will terminate early on variable length
offsets, we can assume both DECL_FIELD_OFFSET and DECL_FIELD_BIT_OFFSET
will be constants by now. So, I assume we can calculate the bit offset
like this:
*bit_offset = (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (fld))
* BITS_PER_UNIT
+ TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (fld)))
- (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (bitregion_start))
* BITS_PER_UNIT
+ TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (bitregion_start)));
(Yes, I know we can factor out the BITS_PER_UNIT and only do one
multiplication, it's just easier to read this way.)
Is this what you had in mind?