diff options
author | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-06-14 22:20:52 +0000 |
---|---|---|
committer | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-06-14 22:20:52 +0000 |
commit | 8853343aafee7c7f0aa1f2b6552524060c80849a (patch) | |
tree | c2b8faaf7a39b649a2119c86c3f2ea46f55e9f80 /libstdc++-v3 | |
parent | a0020156e7b462934107cc33044f056a1d464eb7 (diff) | |
download | gcc-8853343aafee7c7f0aa1f2b6552524060c80849a.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188637 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-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 818e6746fb8..24543a0b83c 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 fc8f63f827e..22c433bff33 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 5e82811757c..15cb423df68 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() { |