Testcase is for example g++.dg/abi/bitfield5.C, bit layout annotated:
struct A {
virtual void f();
int f1 : 1;<--- bit 64
};
struct B : public A {
int f2 : 1; // { dg-warning "ABI" }<--- bit 65
int : 0;
int f3 : 4;
int f4 : 3;
};
maybe it was a bug (above happens with -fabi-version=1 only),
but certainly an ABI may specify that we should do that packing.
What does the C++ memory model say here? (incidentially that's
one case I was worried about when reviewing your patches,
just I didn't think of _bitfield_ tail-packing ... ;)).
I suppose I could just force the bitfield region to start
at a byte boundary.
I think we talked about this months ago when working on the memory model
stuff. Andrew Macleod brought it up, but I can't find the thread.
It is my understanding that f1 and f2 must be in distinct memory
regions. So writing to f1 cannot clobber f2.
I would like to get confirmation from Jason though.