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. Thanks, Richard.