diff options
author | Jonathan Wakely <jwakely.gcc@gmail.com> | 2012-08-26 13:49:44 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2012-08-26 14:49:44 +0100 |
commit | 3dd808fe94257bf7e8af0f30efa8ed5f510fe66b (patch) | |
tree | 611c35e7951e71a49d98fe263dfdb80f2693037a | |
parent | 14fbeb6cf196102bea8cc203559b7172678dece0 (diff) | |
download | gcc-3dd808fe94257bf7e8af0f30efa8ed5f510fe66b.zip gcc-3dd808fe94257bf7e8af0f30efa8ed5f510fe66b.tar.gz gcc-3dd808fe94257bf7e8af0f30efa8ed5f510fe66b.tar.bz2 |
re PR libstdc++/54297 ([C++11] Segmentation fault with std::async and released shared state)
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.
From-SVN: r190685
-rw-r--r-- | libstdc++-v3/ChangeLog | 9 | ||||
-rw-r--r-- | libstdc++-v3/include/std/future | 2 | ||||
-rw-r--r-- | libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc | 27 | ||||
-rw-r--r-- | 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 <jwakely.gcc@gmail.com> + + 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 <jwakely.gcc@gmail.com> Geoff Romer <gromer@google.com> 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 // <http://www.gnu.org/licenses/>. +#include <bits/c++config.h> +#if defined(_GLIBCXX_HAVE_TLS) && defined(PIC) +#define _GLIBCXX_ASYNC_ABI_COMPAT +#endif + #include <future> #include <mutex> #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 +// <future> 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<thread>&&); + template _Bind_simple_helper<void (thread::*)(), reference_wrapper<thread>>::__type __bind_simple(void (thread::*&&)(), reference_wrapper<thread>&&); +_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 // <http://www.gnu.org/licenses/>. -#define _GLIBCXX_ABI_COMPAT_ASYNC - #include <future> 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<thread>&&); - template _Bind_simple_helper<void (thread::*)(), reference_wrapper<thread>>::__type __bind_simple(void (thread::*&&)(), reference_wrapper<thread>&&); -#endif #endif _GLIBCXX_END_NAMESPACE_VERSION |