diff options
author | Jonathan Wakely <jwakely.gcc@gmail.com> | 2012-06-14 22:20:52 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2012-06-14 23:20:52 +0100 |
commit | 01f83b7d266452d45fd53c350a3feef719ecc136 (patch) | |
tree | c2b8faaf7a39b649a2119c86c3f2ea46f55e9f80 | |
parent | 5c8dd62a1b436cf821b32a15d9a2fe79ef3cdc16 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/concurrence.h | 21 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/rope | 11 |
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() { |