On Mon, 26 Mar 2012, Eric Botcazou wrote:
> > I think we indeed can't really in stor-layout, so the only place is very
> > likely get_bit_range.
> Something like that for example. I think the expmed.c hunk should be applied
> to the 4.7 branch as well, because the new code in store_bit_field is quite
> dangerous without it.
> * expmed.c (store_bit_field): Assert that BITREGION_START is a multiple
> of a unit before computing the offset in units.
> * expr.c (get_bit_range): Return the null range if the enclosing record
> is part of a larger bit field.
The patch looks reasonable - can we compute this backward from the
result of the outer get_inner_reference call and the outermost
field-decl though? Or make get_inner_reference compute that while
analyzing the full reference and return a flag? OTOH it shouldn't
be too expensive.
I agree the assert should go to the banch as well, though the code
only ever triggers there with --param allow-store-data-races=0.