https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59767
James Almer <jamrial at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jamrial at gmail dot com --- Comment #1 from James Almer <jamrial at gmail dot com> --- This still happens with gcc 4.9 and gcc 5. int foo(int *bar) { return *bar; } and int foo(int *bar) { return __atomic_load_n(bar, __ATOMIC_SEQ_CST); } Generate the exact same assembly. The latter should add an mfence before the mov instruction.