The C++ front-end (and probably the C front-end) strips zero-width
(and possibly unnamed) bitfields after class layout. This can be
justified in that those bitfields only affect layout; one doesn't need
the middle-end to copy them around, etc. So, you could probably fix
this in the Java front end in the same way. From your patch, it looks
like you're letting the back end see these bitfields, and also that
their DECL_SIZE is not set correctly, which is dangerous in general.
So, I would suggest fixing this in the Java front end.
Note that the Ada front-end also has zero-width bitfield (they are of
aggregate type, though, and they are not and cannot be removed (since they
can be referenced). DECL_SIZE is set correctly, though, but this bug
is not encountered (at least I've never seen it).