https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117759

--- Comment #1 from Maciej W. Rozycki <macro at orcam dot me.uk> ---
I need to withdraw the fix for this PR, it is a red herring that has
misled me.

While there is a data race here it is not within access to the atomic
data object, it comes from the *outside*.  Consider this code:

unsigned short x;
_Atomic unsigned short y;
unsigned short z;

void
write_x (unsigned short v)
{
  x = v;
}

void
write_y (unsigned short v)
{
  y = v;
}

void
write_z (unsigned short v)
{
  z = v;
}

Data objects defined here compile to:

        .globl z
        .section        .sbss,"aw"
        .type   z, @object
        .size   z, 2
        .align 1
z:
        .zero   2
        .globl y
        .type   y, @object
        .size   y, 2
        .align 1
y:
        .zero   2
        .globl x
        .type   x, @object
        .size   x, 2
        .align 1
x:
        .zero   2

There is no data race with parallel calls to `write_y' on different CPUs,
because the previous value of `y' is ignored.  There is a race condition
between the calls, but it is fine and can be resolved by the code author
if required.

There is a data race with parallel calls to, depending on final alignment,
either `write_x' and `write_y', or `write_z' and `write_y', e.g:

time    CPU0                    CPU1                    CPU2
 |
 |      ...                     ldq_u   ..., x          ldq_u   ..., z
 |      ldq_l   ..., y          .                       .
 |      ...                     .                       .
 |      stq_c   ..., y          .                       .
 V      ...                     stq_u   ..., x          stq_u   ..., z

In this execution scenario `y' *will* get clobbered by either CPU1 or CPU2
despite the atomic sequence executed by CPU0.

This data race cannot be resolved with making the access atomic to `y'
alone, `atomic_storeMODE' won't help here.  Accesses to `x', `y' and `z'
all need to be made atomic to prevent this data race from happening, as
implemented with the `-msafe-bwa' feature posted separately; cf.
<https://inbox.sourceware.org/gcc-patches/alpine.deb.2.21.2411172309330.59...@angie.orcam.me.uk/>.

Reply via email to