Boost logo

Boost :

From: Howard Hinnant (howard.hinnant_at_[hidden])
Date: 2006-03-13 18:08:46


On Mar 13, 2006, at 6:00 PM, Peter Dimov wrote:

>> I'm seeing (only with inlining/optimizations on) that the reference
>> count is not properly incremented. This is with a single-threaded
>> test case. I haven't fully understood the code differences yet, but
>> it appears that code is being reordered across these assembly blocks
>> in such a way as to change the logic. I'm not familiar enough with
>> gcc assembly semantics to know if the volatile attribute (on the
>> assembly block itself, not any data) is required to make inline
>> assembly behave itself.
>>
>> Again, this is not a multithread issue that I can see, as the
>> failures I'm seeing are in single threaded code.
>
> There is a known bug in 4.0:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21528
>
> that can have this effect, but it apparently has been fixed in
> 4.0.1. There
> might be others that the boost test doesn't uncover.
>
> I think that the compiler is not supposed to reorder across __asm__
> blocks
> in a way that could change the logic and if such reordering happens it
> should be reported as a bug against g++.

That was very kind of you to look that up for me, thanks. Since my
last posting I've also become convinced that this is an optimization
bug in gcc. It appears that exactly one call to atomic_increment has
been optimized away. I'll investigate further whether 21528 is the
cause/fix. Thanks much.

-Howard


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk