On Tue, Jan 13, 2015 at 3:56 PM, Andrew MacLeod <amacl...@redhat.com> wrote: > Lengthy discussion : https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59448 > > Basically we can generate incorrect code for an atomic consume operation in > some circumstances. The general feeling seems to be that we should simply > promote all consume operations to an acquire operation until there is a > better definition/understanding of the consume model and how GCC can track > it. > > I proposed a simple patch in the PR, and I have not seen or heard of any > dissenting opinion. We should get this in before the end of stage 3 I > think. > > The problem with the patch in the PR is the memory model is immediately > promoted from consume to acquire. This happens *before* any of the > memmodel checks are made. If a consume is illegally specified (such as in a > compare_exchange), it gets promoted to acquire and the compiler doesn't > report the error because it never sees the consume. > > This new patch simply makes the adjustment after any errors are checked on > the originally specified model. It bootstraps on x86_64-unknown-linux-gnu > and passes all regression testing. > I also built an aarch64 compiler and it appears to issue the LDAR as > specified in the PR, but anyone with a vested interest really ought to check > it out with a real build to be sure. > > OK for trunk?
Why not patch get_memmodel? (not sure if that catches all cases) Richard. > > Andrew