https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71949
--- Comment #3 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- atomic_flag can't have additional state for locks because it's lock-free, but it may still be the case that it needs to be initialized in a special way to have a valid set or clear value (that is, that a non-trivial struct initializer is needed - note that compound literals are *not* valid for static struct initializers in ISO C, only braced initializers are). The specification that the macro is only valid as an initializer still applies, whether or not it's valid to use atomic_flag_clear on an uninitialized atomic_flag (I think it's obviously not valid to use atomic_flag_test_and_set on such a variable).