Patchwork [v3] PR 53270 fix hppa-linux bootstrap regression

login
register
mail settings
Submitter Jonathan Wakely
Date July 16, 2012, 9:56 p.m.
Message ID <CAH6eHdQ=DqWffeR8bVUqou52HJFLmrOn4zO3_FcOa9=C+iO54Q@mail.gmail.com>
Download mbox | patch
Permalink /patch/171274/
State New
Headers show

Comments

Jonathan Wakely - July 16, 2012, 9:56 p.m.
On 16 July 2012 22:48, Jonathan Wakely wrote:
> On 7 July 2012 18:16, Jonathan Wakely wrote:
>>
>> My preference is (1) for 4.7 and (4) for 4.6 but the changes are not
>> ones I feel comfortable making on release branches without other
>> opinions.  Please comment :-)
>
> No comments?
>
> Then I'm going for my preferences as stated above.

        PR libstdc++/53270
        * include/ext/concurrence.h (__mutex, __recursive_mutex, __cond): Use
        NSDMI in C++98 mode too.
        * include/ext/rope: Add system_header pragma.
        (_Refcount_Base, _Rope_RopeRep): Use NSDMI.
        (_Rope_RopeRep::~_Rope_RopeRep): Destroy mutex.

Tested x86_64-linux. Committed to trunk.
commit 68d45f18ff7020c3eaeddf8d6e3c198a02891ada
Author: Jonathan Wakely <jwakely.gcc@gmail.com>
Date:   Sat Jul 7 14:40:43 2012 +0100

    	PR libstdc++/53270
    	* include/ext/concurrence.h (__mutex, __recursive_mutex, __cond): Use
    	NSDMI in C++98 mode too.
    	* include/ext/rope: Add system_header pragma.
    	(_Refcount_Base, _Rope_RopeRep): Use NSDMI.
    	(_Rope_RopeRep::~_Rope_RopeRep): Destroy mutex.

Patch

diff --git a/libstdc++-v3/include/ext/concurrence.h b/libstdc++-v3/include/ext/concurrence.h
index 25e218b..ad02839 100644
--- a/libstdc++-v3/include/ext/concurrence.h
+++ b/libstdc++-v3/include/ext/concurrence.h
@@ -1,7 +1,6 @@ 
 // Support for concurrent programing -*- C++ -*-
 
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
+// Copyright (C) 2003-2012 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -143,8 +142,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
   class __mutex 
   {
   private:
-#if __GTHREADS && defined __GTHREAD_MUTEX_INIT \
-    && defined __GXX_EXPERIMENTAL_CXX0X__
+#if __GTHREADS && defined __GTHREAD_MUTEX_INIT
     __gthread_mutex_t _M_mutex = __GTHREAD_MUTEX_INIT;
 #else
     __gthread_mutex_t _M_mutex;
@@ -156,19 +154,10 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
   public:
     __mutex() 
     { 
-#if __GTHREADS
+#if __GTHREADS && ! defined __GTHREAD_MUTEX_INIT
       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); 
+	__GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
 #endif
-	}
-#endif 
     }
 
 #if __GTHREADS && ! defined __GTHREAD_MUTEX_INIT
@@ -208,8 +197,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
   class __recursive_mutex 
   {
   private:
-#if __GTHREADS && defined __GTHREAD_RECURSIVE_MUTEX_INIT \
-    && defined __GXX_EXPERIMENTAL_CXX0X__
+#if __GTHREADS && defined __GTHREAD_RECURSIVE_MUTEX_INIT
     __gthread_recursive_mutex_t _M_mutex = __GTHREAD_RECURSIVE_MUTEX_INIT;
 #else
     __gthread_recursive_mutex_t _M_mutex;
@@ -221,19 +209,10 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
   public:
     __recursive_mutex() 
     { 
-#if __GTHREADS
+#if __GTHREADS && ! defined __GTHREAD_RECURSIVE_MUTEX_INIT
       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); 
+	__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex);
 #endif
-	}
-#endif 
     }
 
 #if __GTHREADS && ! defined __GTHREAD_RECURSIVE_MUTEX_INIT
@@ -333,8 +312,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
   class __cond
   {
   private:
-#if __GTHREADS && defined __GTHREAD_COND_INIT \
-    && defined __GXX_EXPERIMENTAL_CXX0X__
+#if __GTHREADS && defined __GTHREAD_COND_INIT
     __gthread_cond_t _M_cond = __GTHREAD_COND_INIT;
 #else
     __gthread_cond_t _M_cond;
@@ -346,19 +324,10 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
   public:
     __cond() 
     { 
-#if __GTHREADS
+#if __GTHREADS && ! defined __GTHREAD_COND_INIT
       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);
+	__GTHREAD_COND_INIT_FUNCTION(&_M_cond);
 #endif
-	}
-#endif 
     }
 
 #if __GTHREADS && ! defined __GTHREAD_COND_INIT
diff --git a/libstdc++-v3/include/ext/rope b/libstdc++-v3/include/ext/rope
index 15cb423..24b8510 100644
--- a/libstdc++-v3/include/ext/rope
+++ b/libstdc++-v3/include/ext/rope
@@ -1,7 +1,6 @@ 
 // SGI's rope class -*- C++ -*-
 
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-// Free Software Foundation, Inc.
+// Copyright (C) 2001-2012 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -44,6 +43,8 @@ 
 #ifndef _ROPE
 #define _ROPE 1
 
+#pragma GCC system_header
+
 #include <algorithm>
 #include <iosfwd>
 #include <bits/stl_construct.h>
@@ -458,24 +459,21 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
     volatile _RC_t _M_ref_count;
 
     // Constructor
-#if defined __GTHREAD_MUTEX_INIT && defined __GXX_EXPERIMENTAL_CXX0X__
+#ifdef __GTHREAD_MUTEX_INIT
     __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()
+    _Refcount_Base(_RC_t __n) : _M_ref_count(__n)
     {
-#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)
+#ifndef __GTHREAD_MUTEX_INIT
+#ifdef __GTHREAD_MUTEX_INIT_FUNCTION
       __GTHREAD_MUTEX_INIT_FUNCTION (&_M_ref_count_lock);
 #else
 #error __GTHREAD_MUTEX_INIT or __GTHREAD_MUTEX_INIT_FUNCTION should be defined by gthr.h abstraction layer, report problem to libstdc++@gcc.gnu.org.
 #endif
+#endif
     }
 
 #ifndef __GTHREAD_MUTEX_INIT
@@ -592,7 +590,11 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       bool _M_is_balanced:8;
       unsigned char _M_depth;
       __GC_CONST _CharT* _M_c_string;
+#ifdef __GTHREAD_MUTEX_INIT
+      __gthread_mutex_t _M_c_string_lock = __GTHREAD_MUTEX_INIT;
+#else
       __gthread_mutex_t _M_c_string_lock;
+#endif
                         /* Flattened version of string, if needed.  */
                         /* typically 0.                             */
                         /* If it's not 0, then the memory is owned  */
@@ -613,13 +615,11 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 	_M_tag(__t), _M_is_balanced(__b), _M_depth(__d), _M_c_string(0)
 #ifdef __GTHREAD_MUTEX_INIT
-    {
-      // Do not copy a POSIX/gthr mutex once in use.  However, bits are bits.
-      __gthread_mutex_t __tmp = __GTHREAD_MUTEX_INIT;
-      _M_c_string_lock = __tmp;
-    }
+      { }
 #else
-    { __GTHREAD_MUTEX_INIT_FUNCTION (&_M_c_string_lock); }
+      { __GTHREAD_MUTEX_INIT_FUNCTION (&_M_c_string_lock); }
+      ~_Rope_RopeRep()
+      { __gthread_mutex_destroy (&_M_c_string_lock); }
 #endif
 #ifdef __GC
       void