aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely.gcc@gmail.com>2012-06-14 22:20:52 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2012-06-14 23:20:52 +0100
commit01f83b7d266452d45fd53c350a3feef719ecc136 (patch)
treec2b8faaf7a39b649a2119c86c3f2ea46f55e9f80
parent5c8dd62a1b436cf821b32a15d9a2fe79ef3cdc16 (diff)
downloadgcc-01f83b7d266452d45fd53c350a3feef719ecc136.zip
gcc-01f83b7d266452d45fd53c350a3feef719ecc136.tar.gz
gcc-01f83b7d266452d45fd53c350a3feef719ecc136.tar.bz2
re PR libstdc++/53270 (Error when bootstrapping gcc on hppa2.0-unknown-linux-gcc)
PR libstdc++/53270 * include/ext/concurrence.h (__mutex, __recursive_mutex, __cond): Use NSDMI in C++11 mode. * include/ext/rope (_Refcount_Base): Likewise. Destroy mutex in destructor when initialized by function. From-SVN: r188637
-rw-r--r--libstdc++-v3/ChangeLog8
-rw-r--r--libstdc++-v3/include/ext/concurrence.h21
-rw-r--r--libstdc++-v3/include/ext/rope11
3 files changed, 40 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 818e674..24543a0 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,13 @@
2012-06-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+ PR libstdc++/53270
+ * include/ext/concurrence.h (__mutex, __recursive_mutex, __cond): Use
+ NSDMI in C++11 mode.
+ * include/ext/rope (_Refcount_Base): Likewise. Destroy mutex in
+ destructor when initialized by function.
+
+2012-06-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
PR libstdc++/53648
* include/std/tuple (__empty_not_final): Do not use EBO for tuples.
* testsuite/20_util/tuple/53648.cc: New.
diff --git a/libstdc++-v3/include/ext/concurrence.h b/libstdc++-v3/include/ext/concurrence.h
index fc8f63f..22c433b 100644
--- a/libstdc++-v3/include/ext/concurrence.h
+++ b/libstdc++-v3/include/ext/concurrence.h
@@ -143,7 +143,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class __mutex
{
private:
+#if __GTHREADS && defined __GTHREAD_MUTEX_INIT \
+ && defined __GXX_EXPERIMENTAL_CXX0X__
+ __gthread_mutex_t _M_mutex = __GTHREAD_MUTEX_INIT;
+#else
__gthread_mutex_t _M_mutex;
+#endif
__mutex(const __mutex&);
__mutex& operator=(const __mutex&);
@@ -155,8 +160,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (__gthread_active_p())
{
#if defined __GTHREAD_MUTEX_INIT
+# ifndef __GXX_EXPERIMENTAL_CXX0X__
__gthread_mutex_t __tmp = __GTHREAD_MUTEX_INIT;
_M_mutex = __tmp;
+# endif
#else
__GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
#endif
@@ -201,7 +208,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class __recursive_mutex
{
private:
+#if __GTHREADS && defined __GTHREAD_RECURSIVE_MUTEX_INIT \
+ && defined __GXX_EXPERIMENTAL_CXX0X__
+ __gthread_recursive_mutex_t _M_mutex = __GTHREAD_RECURSIVE_MUTEX_INIT;
+#else
__gthread_recursive_mutex_t _M_mutex;
+#endif
__recursive_mutex(const __recursive_mutex&);
__recursive_mutex& operator=(const __recursive_mutex&);
@@ -213,8 +225,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (__gthread_active_p())
{
#if defined __GTHREAD_RECURSIVE_MUTEX_INIT
+# ifndef __GXX_EXPERIMENTAL_CXX0X__
__gthread_recursive_mutex_t __tmp = __GTHREAD_RECURSIVE_MUTEX_INIT;
_M_mutex = __tmp;
+# endif
#else
__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex);
#endif
@@ -319,7 +333,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class __cond
{
private:
+#if __GTHREADS && defined __GTHREAD_COND_INIT \
+ && defined __GXX_EXPERIMENTAL_CXX0X__
+ __gthread_cond_t _M_cond = __GTHREAD_COND_INIT;
+#else
__gthread_cond_t _M_cond;
+#endif
__cond(const __cond&);
__cond& operator=(const __cond&);
@@ -331,8 +350,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (__gthread_active_p())
{
#if defined __GTHREAD_COND_INIT
+# ifndef __GXX_EXPERIMENTAL_CXX0X__
__gthread_cond_t __tmp = __GTHREAD_COND_INIT;
_M_cond = __tmp;
+# endif
#else
__GTHREAD_COND_INIT_FUNCTION(&_M_cond);
#endif
diff --git a/libstdc++-v3/include/ext/rope b/libstdc++-v3/include/ext/rope
index 5e82811..15cb423 100644
--- a/libstdc++-v3/include/ext/rope
+++ b/libstdc++-v3/include/ext/rope
@@ -458,13 +458,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
volatile _RC_t _M_ref_count;
// Constructor
+#if defined __GTHREAD_MUTEX_INIT && defined __GXX_EXPERIMENTAL_CXX0X__
+ __gthread_mutex_t _M_ref_count_lock = __GTHREAD_MUTEX_INIT;
+#else
__gthread_mutex_t _M_ref_count_lock;
+#endif
_Refcount_Base(_RC_t __n) : _M_ref_count(__n), _M_ref_count_lock()
{
#ifdef __GTHREAD_MUTEX_INIT
+# ifndef __GXX_EXPERIMENTAL_CXX0X__
__gthread_mutex_t __tmp = __GTHREAD_MUTEX_INIT;
_M_ref_count_lock = __tmp;
+# endif
#elif defined(__GTHREAD_MUTEX_INIT_FUNCTION)
__GTHREAD_MUTEX_INIT_FUNCTION (&_M_ref_count_lock);
#else
@@ -472,6 +478,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif
}
+#ifndef __GTHREAD_MUTEX_INIT
+ ~_Refcount_Base()
+ { __gthread_mutex_destroy(&_M_ref_count_lock); }
+#endif
+
void
_M_incr()
{