http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51994
--- Comment #2 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2012-01-25 11:15:09 UTC --- > Negative bitpos is fine - Ada uses that quite extensively and with MEM_REFs > this just got more prominent. get_inner_reference is declared to return > a _signed_ HOST_WIDE_INT bitpos for a reason. Extensively is a bit of an overstatement, but Ada does use negative offsets. The recent story about them in build_ref_for_model shows that they can be problematic though. > What should happen instead is that store_field needs to adjust the address > to properly point before the bitfield for calling store_bit_field. Or the > latter needs to take signed arguments for bitpos and do the adjustment > itself. > > Does simply changing the store_bit_field[_1] prototype work for you? It might also be interesting to find out why we have a negative bitpos here.