Florian Weimer writes:
> * Samuel Tardieu:
>
> > On 27/10, Florian Weimer wrote:
> >
> > | (I can't reproduce the conditional store with my GCC 4.2 installation,
> > | though.)
> >
> > You need "-O -fno-inline" to trigger it on this particular example
> > (you don't need "-fno-inline" if you put "Lock" in a separate package).
>
> Ah, thanks. I see it now.
>
> If not for Ada, we need to fix it for Java. The following snippet shows
> the same problem:
>
> class C {
> static volatile boolean flag;
> static int shared;
> public void maybe_increment() {
> if (flag)
> ++shared;
> }
> }
>
> _ZN1C15maybe_incrementEJvv:
> .LFB3:
> movzbl _ZN1C4flagE(%rip), %eax
> cmpb $1, %al
> movl _ZN1C6sharedE(%rip), %eax
> sbbl $-1, %eax
> movl %eax, _ZN1C6sharedE(%rip)
> ret
>
> And the 1.5 memory model should really, really prevent that (if not,
> it's broken).
The Java 1.5 memory model will prevent that. I'm hoping Ian Taylor's
patch will fix this problem for Java as well as C.
Andrew.