https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69002
--- Comment #5 from Florian Weimer <fw at gcc dot gnu.org> --- (In reply to Marek Polacek from comment #4) > The footnote to 6.5.2.3/5 says "Members can be safely accessed using a > non-atomic object which is assigned to or from the atomic object." Does it > mean that the following is OK? Yes, I think this is how this language construct is supposed to be used. > void > write1 (_Atomic S p, int x) > { > S s = p; > s.x = x; > } > > void > write2 (_Atomic S *p, int x) > { > S *s = p; > s->x = x; > } Should be: void write2 (_Atomic S *p, int x) { S s = {.x = x}; *p = s; } write1 is a bit nonsensical.