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

--- Comment #7 from Martin Sebor <msebor at gcc dot gnu.org> ---
FWIW, I think it would make sense to diagnose some of the constructs for other
reasons besides accessing a member (of an atomic struct).  For example, in
write1(), the function is most likely not going to do what its author or caller
expects:  i.e., it updates a copy of the argument, not the original.  It makes
no sense (in this case) for the argument to be atomic since it clearly is not
shared with other threads.  So GCC should probably warn about it, and could
also treat it as non-atomic and emit better code (the latter part is the
subject of bug 68622).

How to write2() depends on whether the function is intended to initialize the
argument or simply assign to it.  If the former, either

  atomic_init (p, s);

or

  atomic_store_explicit (p, s, memory_order_relaxed);

would work.  Obviously, without knowing more about the context in which it's
called we can't tell which alternative is appropriate.  Which makes me wonder
if how the function accesses an atomic object referenced by its argument should
be made part of the interface (e.g., via some attribute).

Reply via email to