https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98965
--- Comment #4 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- The difficulty with making such an assignment atomic is that atomic operations for different sizes of atomic access don't interoperate on the same memory; if the struct contains an _Atomic int, that's accessed atomically via appropriate int-sized atomic operations, while a larger structure may use locking for atomic access in libatomic, and if both mechanisms are used on the same memory the result doesn't properly follow the memory model. So you'd need to split struct assignment up into assignment of members to access a member atomically. But that couldn't work at all when you have a union with atomic members, because in the union case the compiler can't know which is the currently active member that would determine the size of the atomic access.