https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98965
--- Comment #5 from Martin Sebor <msebor at gcc dot gnu.org> --- I was thinking of the latter, i.e., splitting the assignment into a series of ordinary and atomic, the latter per member. The union case would be diagnosed (it too should be straightforward to detect). But C++ rejects such mixed assignments, so the easiest solution would be to do the same in C (or at least warn).