From: redi Date: Sun, 5 Feb 2012 23:55:51 +0000 (+0000) Subject: PR libstdc++/52104 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6157f2af172579b90462d74081163a0e817bbf38;p=thirdparty%2Fgcc.git PR libstdc++/52104 * include/std/future (__future_base::_Async_state_common): Define destructor inline for targets without TLS. * src/c++11/future.cc (__future_base::_Async_state_common): Only define destructor for TLS targets. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183920 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 4e9235862ccf..799be7c5d4e5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2012-02-05 Jonathan Wakely + + PR libstdc++/52104 + * include/std/future (__future_base::_Async_state_common): Define + destructor inline for targets without TLS. + * src/c++11/future.cc (__future_base::_Async_state_common): Only + define destructor for TLS targets. + 2012-02-05 Jonathan Wakely PR libstdc++/51956 diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index 1093e3f1bb49..962400bda659 100644 --- a/libstdc++-v3/include/std/future +++ b/libstdc++-v3/include/std/future @@ -1425,7 +1425,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION class __future_base::_Async_state_common : public __future_base::_State_base { protected: +#ifdef _GLIBCXX_HAVE_TLS ~_Async_state_common(); +#else + ~_Async_state_common() { _M_join(); } +#endif // Allow non-timed waiting functions to block until the thread completes, // as if joined. diff --git a/libstdc++-v3/src/c++11/future.cc b/libstdc++-v3/src/c++11/future.cc index dab0774ad0a1..61a9729a1336 100644 --- a/libstdc++-v3/src/c++11/future.cc +++ b/libstdc++-v3/src/c++11/future.cc @@ -85,11 +85,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __future_base::_State_base::~_State_base() = default; +#ifdef _GLIBCXX_HAVE_TLS __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&&); #endif +#endif _GLIBCXX_END_NAMESPACE_VERSION } // namespace std