On Mon, 26 Feb 2018, Szabolcs Nagy wrote: > > rmw load is only valid if the implementation can > guarantee that atomic objects are never read-only.
OK, but that sounds like a matter of not emitting atomic objects into .rodata, which shouldn't be a big problem, if not for backwards compatibility concern? > current implementations on linux (including clang) > don't do that, so an rmw load can observably break > conforming c code: a static global const object is > placed in .rodata section and thus rmw on it is a > crash at runtime contrary to c standard requirements. Note that in your example GCC emits 'x' as a common symbol, you need '... x = { 0 };' for it to appear in .rodata, > on an aarch64 machine clang miscompiles this code: [...] and then with new enough libatomic on Glibc this segfaults with GCC on x86_64 too due to IFUNC redirection mentioned in the other subthread. Alexander