https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64930
--- Comment #12 from torvald at gcc dot gnu.org --- (In reply to Alan Modra from comment #9) > My point was that if you write a testcase that specifically tests for > consume and get acquire code then that is a fail. The code generated is > using a bigger hammer than necessary. The consensus in ISO C++ SG1 (though we had no straw poll on this particular thing, so this is my conclusion from the discussions and the opinions voiced by other compiler vendors) is that implementing C/C++ memory_order_consume means, in practice, promoting to memory_order_acquire. This is not a GCC-specific solution or deficiency. It is rather the realization that the standard's intent can't be implemented in practice without too much costs elsewhere (e.g., because of how tracking dependencies properly would require points-to analysis or conservatively adding barriers in likely many places in the code). See this paper for more background: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4321.pdf