This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Optimization of conditional access to globals: thread-unsafe?


* 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).


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]