On Mon, Jun 17, 2013 at 01:27:38PM +0100, Julian Brown wrote:
> Well -- I'm certainly no expert on the C++ memory model, but I am under
> the impression (that I can't seem to verify by googling ;-)) that
> accesses to adjacent bitfields during volatile access of a particular
> bitfield are forbidden. So simply, for the following:
>
> struct foo {
> int a : 8;
> int b : 8;
> int c : 16;
> };
>
> volatile struct foo x;
>
> void bar (void) { x.b++; }
I believe in the above it is ok in C++ memory model if the RMW cycle is
using 32-bit type, but in
struct foo {
int a : 8;
int b : 8;
char c, d;
};
volatile struct foo x;
void bar (void) { x.b++; }
it is not (but it is laid out the same), because modification to x.a or x.b
must not create data races on x.c and/or x.d.
Jakub