From afd88205d8a95ccea9ba77fd23f0258025fcc249 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Mon, 21 Dec 2009 19:00:34 +0000 Subject: atomic: Update to N3000. 2009-12-20 Benjamin Kosnik * include/std/atomic: Update to N3000. * include/bits/atomic_0.h: Same. * include/bits/atomic_2.h: Same. * include/c_global/cstdatomic: Move... * include/bits/atomic_base.h: ...here. * include/c_compatibility/stdatomic.h: Just include atomic_base.h. * include/precompiled/stdc++.h: Adjust includes. * include/Makefile.am: Adjust files. * include/Makefile.in: Regenerate. * include/std/future: Adjust. * src/atomic.cc: Adjust, adjust exports for compatibility. * src/compatibility.cc: Move C++0x stuff... * src/compatibility-c++0x.cc: ...here. * doc/xml/manual/using.xml: Update. * doc/xml/manual/status_cxx200x.xml: Update. * doc/doxygen/user.cfg.in: Update. * testsuite/29_atomics/atomic_address/cons/assign_neg.cc: Same. * testsuite/29_atomics/atomic_address/cons/single_value.cc: Same. * testsuite/29_atomics/atomic_address/cons/copy_neg.cc: Same. * testsuite/29_atomics/atomic_address/cons/default.cc: Same. * testsuite/29_atomics/atomic_address/cons/aggregate.cc: Same. * testsuite/29_atomics/atomic_address/requirements/ standard_layout.cc: Same. * testsuite/29_atomics/atomic_address/requirements/trivial.cc: Same. * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Same. * testsuite/29_atomics/atomic_integral/cons/single_value.cc: Same. * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Same. * testsuite/29_atomics/atomic_integral/cons/default.cc: Same. * testsuite/29_atomics/atomic_integral/cons/copy_list.cc: Same. * testsuite/29_atomics/atomic_integral/cons/direct_list.cc: Same. * testsuite/29_atomics/atomic_integral/requirements/ standard_layout.cc: Same. * testsuite/29_atomics/atomic_integral/requirements/trivial.cc: Same. * testsuite/29_atomics/atomic_integral/operators/increment_neg.cc: Same. * testsuite/29_atomics/atomic_integral/operators/ integral_assignment.cc: Same. * testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc: Same. * testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc: Same. * testsuite/29_atomics/atomic_integral/operators/increment.cc: Same. * testsuite/29_atomics/atomic_integral/operators/bitwise.cc: Same. * testsuite/29_atomics/atomic_integral/operators/decrement.cc: Same. * testsuite/29_atomics/atomic_integral/operators/ integral_conversion.cc: Same. * testsuite/29_atomics/atomic_flag/cons/assign_neg.cc: Same. * testsuite/29_atomics/atomic_flag/cons/copy_neg.cc: Same. * testsuite/29_atomics/atomic_flag/cons/default.cc: Same. * testsuite/29_atomics/atomic_flag/cons/aggregate.cc: Same. * testsuite/29_atomics/atomic_flag/requirements/ standard_layout.cc: Same. * testsuite/29_atomics/atomic_flag/requirements/trivial.cc: Same. * testsuite/29_atomics/atomic_flag/clear/1.cc: Same. * testsuite/29_atomics/atomic_flag/test_and_set/explicit.c * testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc: Same. * testsuite/29_atomics/atomic_flag/test_and_set/implicit.c * testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc: Same. * testsuite/29_atomics/headers/stdatomic.h/functions.c * testsuite/29_atomics/atomic/cons/assign_neg.cc: Same. * testsuite/29_atomics/atomic/cons/single_value.cc: Same. * testsuite/29_atomics/atomic/cons/copy_neg.cc: Same. * testsuite/29_atomics/atomic/cons/default.cc: Same. * testsuite/29_atomics/atomic/cons/copy_list.cc: Same. * testsuite/29_atomics/atomic/cons/direct_list.cc: Same. * testsuite/29_atomics/atomic/requirements/explicit_instantiation/ 1.cc: Same. * testsuite/29_atomics/atomic/requirements/base_classes.cc: Same. * testsuite/29_atomics/atomic/operators/integral_assignment.cc: Same. * testsuite/29_atomics/atomic/operators/integral_conversion.cc: Same. * testsuite/util/testsuite_common_types.h: Adjust. * testsuite/29_atomics/headers/cstdatomic: Move and adjust... * testsuite/29_atomics/headers/atomic: ...here. * testsuite/29_atomics/headers/atomic/types_std_c++0x.cc: Same. * testsuite/29_atomics/headers/atomic/functions_std_c++0x.cc: Same. * testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc: Same. * testsuite/29_atomics/headers/atomic/macros.cc: Same. * testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc: Add. * testsuite/29_atomics/atomic/cons/user_pod.cc: Add. From-SVN: r155377 --- libstdc++-v3/src/atomic.cc | 43 ++++++++++++++++++++++++--------- libstdc++-v3/src/compatibility-c++0x.cc | 16 +++++++++++- libstdc++-v3/src/compatibility.cc | 19 --------------- 3 files changed, 47 insertions(+), 31 deletions(-) (limited to 'libstdc++-v3/src') diff --git a/libstdc++-v3/src/atomic.cc b/libstdc++-v3/src/atomic.cc index 775bb7601c1..bff8fa98c64 100644 --- a/libstdc++-v3/src/atomic.cc +++ b/libstdc++-v3/src/atomic.cc @@ -24,7 +24,7 @@ // . #include "gstdint.h" -#include +#include #include #define LOGSIZE 4 @@ -40,7 +40,7 @@ namespace } #endif - std::__atomic_flag_base volatile flag_table[ 1 << LOGSIZE ] = + std::__atomic_flag_base flag_table[ 1 << LOGSIZE ] = { ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, ATOMIC_FLAG_INIT, @@ -54,7 +54,7 @@ namespace std namespace __atomic0 { bool - atomic_flag::test_and_set(memory_order) volatile + atomic_flag::test_and_set(memory_order) { #if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) lock_guard __lock(get_atomic_mutex()); @@ -65,7 +65,7 @@ namespace std } void - atomic_flag::clear(memory_order) volatile + atomic_flag::clear(memory_order) { #if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) lock_guard __lock(get_atomic_mutex()); @@ -77,31 +77,31 @@ namespace std extern "C" { bool - atomic_flag_test_and_set_explicit(volatile __atomic_flag_base* __a, + atomic_flag_test_and_set_explicit(__atomic_flag_base* __a, memory_order __m) throw () { - volatile atomic_flag* d = static_cast(__a); + atomic_flag* d = static_cast(__a); return d->test_and_set(__m); } void - atomic_flag_clear_explicit(volatile __atomic_flag_base* __a, + atomic_flag_clear_explicit(__atomic_flag_base* __a, memory_order __m) throw () { - volatile atomic_flag* d = static_cast(__a); + atomic_flag* d = static_cast(__a); return d->clear(__m); } void - __atomic_flag_wait_explicit(volatile __atomic_flag_base* __a, + __atomic_flag_wait_explicit(__atomic_flag_base* __a, memory_order __x) throw () { while (atomic_flag_test_and_set_explicit(__a, __x)) { }; } - volatile __atomic_flag_base* - __atomic_flag_for_address(const volatile void* __z) throw () + __atomic_flag_base* + __atomic_flag_for_address(const void* __z) throw () { uintptr_t __u = reinterpret_cast(__z); __u += (__u >> 2) + (__u << 4); @@ -114,3 +114,24 @@ namespace std } } // extern "C" } // namespace std + + +// XXX GLIBCXX_ABI Deprecated +// gcc-4.5.0 +// signature changes + +// The rename syntax for default exported names is +// asm (".symver name1,exportedname@GLIBCXX_3.4") +// asm (".symver name2,exportedname@@GLIBCXX_3.4.5") +// In the future, GLIBCXX_ABI > 6 should remove all uses of +// _GLIBCXX_*_SYMVER macros in this file. + +#define _GLIBCXX_ASM_SYMVER(cur, old, version) \ + asm (".symver " #cur "," #old "@@" #version); + +#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \ + && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) +_GLIBCXX_ASM_SYMVER(_ZNSt9__atomic011atomic_flag5clearESt12memory_order, _ZNVSt9__atomic011atomic_flag5clearESt12memory_order, GLIBCXX_3.4.11) + +_GLIBCXX_ASM_SYMVER(_ZNSt9__atomic011atomic_flag12test_and_setESt12memory_order, _ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order, GLIBCXX_3.4.11) +#endif diff --git a/libstdc++-v3/src/compatibility-c++0x.cc b/libstdc++-v3/src/compatibility-c++0x.cc index df28ecae358..5d6e5ddc14f 100644 --- a/libstdc++-v3/src/compatibility-c++0x.cc +++ b/libstdc++-v3/src/compatibility-c++0x.cc @@ -33,9 +33,23 @@ namespace std { + // gcc-4.4.0 + // exported std::lock_error +#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) + class lock_error : public exception + { + public: + virtual const char* + _GLIBCXX_CONST what() const throw(); + }; + + const char* + lock_error::what() const throw() + { return "std::lock_error"; } +#endif + // We need these due to the symbols exported since GLIBCXX_3.4.10. // See libstdc++/41662 for details. - template struct hash : public std::unary_function<_Tp, size_t> { diff --git a/libstdc++-v3/src/compatibility.cc b/libstdc++-v3/src/compatibility.cc index c81f08e070f..41071d23b81 100644 --- a/libstdc++-v3/src/compatibility.cc +++ b/libstdc++-v3/src/compatibility.cc @@ -513,25 +513,6 @@ extern __attribute__((used, weak)) const void * const _ZTIPKe[4] (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe }; #endif // _GLIBCXX_LONG_DOUBLE_COMPAT -// gcc-4.4.0 -// exported std::lock_error -#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) -namespace std -{ - class lock_error : public exception - { - public: - virtual const char* - _GLIBCXX_CONST what() const throw(); - }; - - const char* - lock_error::what() const throw() - { return "std::lock_error"; } -} -#endif - - #ifdef _GLIBCXX_SYMVER_DARWIN #if (defined(__ppc__) || defined(__ppc64__)) && defined(PIC) /* __eprintf shouldn't have been made visible from libstdc++, or -- cgit v1.2.3