This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
- From: Jonathan Wakely <jwakely at redhat dot com>
- To: Sandra Loosemore <sandra at codesourcery dot com>
- Cc: Hans-Peter Nilsson <hp at bitrange dot com>, pinskia at gmail dot com, David Edelsohn <dje dot gcc at gmail dot com>, Torvald Riegel <triegel at redhat dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>, "libstdc++ at gcc dot gnu dot org" <libstdc++ at gcc dot gnu dot org>
- Date: Sat, 17 Jan 2015 20:23:56 +0000
- Subject: Re: Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
- Authentication-results: sourceware.org; auth=none
- References: <CAGWvnyng32Rh7US3Azhao9B=JMnsZaJ_1vRik36wQ4FKWm1BkQ at mail dot gmail dot com> <9CAB68C4-08D2-43A1-9A8B-EDE135DDFC8F at gmail dot com> <alpine dot BSF dot 2 dot 02 dot 1501170144070 dot 76242 at arjuna dot pair dot com> <20150117134853 dot GR3360 at redhat dot com> <54BABF38 dot 7080602 at codesourcery dot com>
On 17/01/15 12:59 -0700, Sandra Loosemore wrote:
Re:
On 17/01/15 01:45 -0500, Hans-Peter Nilsson wrote:
On Fri, 16 Jan 2015, pinskia@gmail.com wrote:
On Jan 16, 2015, at 9:57 PM, David Edelsohn <dje.gcc@gmail.com> wrote:
This patch has broken bootstrap on AIX
May I mention that this really should have been tested on systems
other than x86 Linux.
It also broke all newlib targets too. So you could have tested one listed in the sim-test web page.
For those interested, PR64638.
Should be fixed in trunk now, by this patch.
I'm now getting this error in an arm-none-linux-gnueabi cross build:
In file included from /scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/future:44:0,
from /scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/functexcept.cc:34:
/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:71:3:
error: #error We require lock-free atomic operations on int
# error We require lock-free atomic operations on int
^
It used to work a few days ago.... nothing changed in my build
environment except that I did "svn up" in my gcc source directory....
Well that file didn't exist until yesterday :-)
Does the attached patch fix it?
The new __atomic_futex_unsigned type is only used in <future> when
ATOMIC_LOCK_FREE > 1, so there's no point trying to define it and
then failing if int is not lock-free, as the type isn't going to be
used anyway.
diff --git a/libstdc++-v3/include/bits/atomic_futex.h b/libstdc++-v3/include/bits/atomic_futex.h
index 2673604..b4138ba 100644
--- a/libstdc++-v3/include/bits/atomic_futex.h
+++ b/libstdc++-v3/include/bits/atomic_futex.h
@@ -49,7 +49,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_BEGIN_NAMESPACE_VERSION
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
-#if defined(_GLIBCXX_HAVE_LINUX_FUTEX)
+#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
struct __atomic_futex_unsigned_base
{
// Returns false iff a timeout occurred.
@@ -66,10 +66,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
typedef chrono::system_clock __clock_t;
- // XXX We expect this to be lock-free, and having the payload at offset 0.
-#if ATOMIC_INT_LOCK_FREE < 2
-# error We require lock-free atomic operations on int
-#endif
+ // This must be lock-free and at offset 0.
atomic<unsigned> _M_data;
__atomic_futex_unsigned(unsigned __data) : _M_data(__data)
@@ -281,7 +278,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
-#endif // _GLIBCXX_HAVE_LINUX_FUTEX
+#endif // _GLIBCXX_HAVE_LINUX_FUTEX && ATOMIC_INT_LOCK_FREE > 1
#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
_GLIBCXX_END_NAMESPACE_VERSION