*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?

Reply via email to