Sebastian Redl wrote:
That's my exception_ptr code again (indirectly, this time).
Apparently, __exchange_and_add has exactly the same problem as
__sync_add_and_fetch_4: it's just not implemented on i386 targets.
Not really, it would be too easy ;) It is implemented of course, but it
is provided as an exported symbol by libstdc++. Thus, since the test
only links libsupc++, it shows that the latter isn't selfcontained.
That makes the regression range incorrect, though: the specified range
doesn't contain any changes to my code. This was introduced as early
as r139091.
Yes, that's rather mysterious.
The other weird thing is that the 32-bit target of the x86_64 compiler
doesn't have _GLIBCXX_ATOMIC_BUILTINS_4 defined - apparently it
defaults to a i386 profile. Now, I understand that for the 32-bit x86
compiler, but the 64-bit compiler is not a cross-compiler and should
merely target the 32-bit mode of x86_64 CPUs. It should have the
__sync built-ins.
I don't think the 32-bit mode of x86_64 CPUs provide the builtins but,
anyway...
Also, it's curious that we haven't seen this test failure for real x86
builds.
We are seeing it, but only lately.
Anwyay, one way or the other, l porpose for now let's just support the
new facility only for targets providing the sync builtins and be done
with it. Agreed?
Paolo.