From 6728dc33ee0dff2e0674dd590dfb498cd1fcd1b4 Mon Sep 17 00:00:00 2001 From: redi Date: Sun, 26 Aug 2012 13:49:44 +0000 Subject: [PATCH] PR libstdc++/54297 * src/c++11/future.cc (~_Async_state_common): Move to... * src/c++11/compatibility-thread-c++0x.cc (~_Async_state_common): Here. (_GLIBCXX_ABI_COMPAT_ASYNC): Rename to _GLIBCXX_ASYNC_ABI_COMPAT. * include/std/future (_GLIBCXX_ABI_COMPAT_ASYNC): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190685 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 9 ++++++++ libstdc++-v3/include/std/future | 2 +- .../src/c++11/compatibility-thread-c++0x.cc | 27 +++++++++++++++++++++- libstdc++-v3/src/c++11/future.cc | 11 --------- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0bd863b..88b4848 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,4 +1,13 @@ 2012-08-26 Jonathan Wakely + + PR libstdc++/54297 + * src/c++11/future.cc (~_Async_state_common): Move to... + * src/c++11/compatibility-thread-c++0x.cc (~_Async_state_common): + Here. + (_GLIBCXX_ABI_COMPAT_ASYNC): Rename to _GLIBCXX_ASYNC_ABI_COMPAT. + * include/std/future (_GLIBCXX_ABI_COMPAT_ASYNC): Likewise. + +2012-08-26 Jonathan Wakely Geoff Romer PR libstdc++/54351 diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index feae382..9568192 100644 --- a/libstdc++-v3/include/std/future +++ b/libstdc++-v3/include/std/future @@ -1427,7 +1427,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION class __future_base::_Async_state_common : public __future_base::_State_base { protected: -#if defined(_GLIBCXX_HAVE_TLS) && defined(_GLIBCXX_ABI_COMPAT_ASYNC) +#ifdef _GLIBCXX_ASYNC_ABI_COMPAT ~_Async_state_common(); #else ~_Async_state_common() = default; diff --git a/libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc b/libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc index cc8761e..e5c7eec 100644 --- a/libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc +++ b/libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc @@ -22,11 +22,16 @@ // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . +#include +#if defined(_GLIBCXX_HAVE_TLS) && defined(PIC) +#define _GLIBCXX_ASYNC_ABI_COMPAT +#endif + #include #include #ifndef __GXX_EXPERIMENTAL_CXX0X__ -# error "compatibility-c++0x.cc must be compiled with -std=gnu++0x" +# error "compatibility-thread-c++0x.cc must be compiled with -std=gnu++0x" #endif #define _GLIBCXX_ASM_SYMVER(cur, old, version) \ @@ -70,3 +75,23 @@ _GLIBCXX_ASM_SYMVER(_ZN9__gnu_cxx11try_to_lockE, _ZSt11try_to_lock, GLIBCXX_3.4. #endif #endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1 + + +// XXX GLIBCXX_ABI Deprecated +// gcc-4.7.0 +// export changes +#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \ + && (ATOMIC_INT_LOCK_FREE > 1) +#if defined(_GLIBCXX_HAVE_TLS) && defined(PIC) +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + __future_base::_Async_state_common::~_Async_state_common() { _M_join(); } + + // Explicit instantiation due to -fno-implicit-instantiation. + template void call_once(once_flag&, void (thread::*&&)(), reference_wrapper&&); + template _Bind_simple_helper>::__type __bind_simple(void (thread::*&&)(), reference_wrapper&&); +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std +#endif +#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1 diff --git a/libstdc++-v3/src/c++11/future.cc b/libstdc++-v3/src/c++11/future.cc index eaea393..0552537 100644 --- a/libstdc++-v3/src/c++11/future.cc +++ b/libstdc++-v3/src/c++11/future.cc @@ -22,8 +22,6 @@ // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . -#define _GLIBCXX_ABI_COMPAT_ASYNC - #include namespace @@ -86,15 +84,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __future_base::_Result_base::~_Result_base() = default; __future_base::_State_base::~_State_base() = default; - -#ifdef _GLIBCXX_HAVE_TLS - // Exported for compatibility with ABI version 3.4.17 - __future_base::_Async_state_common::~_Async_state_common() { _M_join(); } - - // Explicit instantiation due to -fno-implicit-instantiation. - template void call_once(once_flag&, void (thread::*&&)(), reference_wrapper&&); - template _Bind_simple_helper>::__type __bind_simple(void (thread::*&&)(), reference_wrapper&&); -#endif #endif _GLIBCXX_END_NAMESPACE_VERSION -- 2.7.4