re PR libstdc++/53270 (Error when bootstrapping gcc on hppa2.0-unknown-linux-gcc)
authorJonathan Wakely <jwakely.gcc@gmail.com>
Thu, 14 Jun 2012 22:20:52 +0000 (22:20 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 14 Jun 2012 22:20:52 +0000 (23:20 +0100)
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

libstdc++-v3/ChangeLog
libstdc++-v3/include/ext/concurrence.h
libstdc++-v3/include/ext/rope

index 818e6746fb860e6b5801abc6302f515c9f46a8d2..24543a0b83cb602f494fc79a7ca0d11e86a64ec1 100644 (file)
@@ -1,3 +1,11 @@
+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
index fc8f63f827e88644856b7bbe93b26e665c8c39b8..22c433bff33c9d03c50a364cba298197a6b5c1ae 100644 (file)
@@ -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
index 5e82811757c2245d6632ae6f727105e98014922a..15cb423df68e87b7cb39ec3203613a60099b663e 100644 (file)
@@ -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()
     {