summaryrefslogtreecommitdiff
path: root/libstdc++-v3/src
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@redhat.com>2009-12-21 19:00:34 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2009-12-21 19:00:34 +0000
commitafd88205d8a95ccea9ba77fd23f0258025fcc249 (patch)
tree79f5ade61a5285c7735d351c9622e56ae1486b77 /libstdc++-v3/src
parentdcc1e1fab49e2b2d000b22f0053c0ffe53c44b14 (diff)
downloadgcc-afd88205d8a95ccea9ba77fd23f0258025fcc249.tar.gz
atomic: Update to N3000.
2009-12-20 Benjamin Kosnik <bkoz@redhat.com> * 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
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r--libstdc++-v3/src/atomic.cc43
-rw-r--r--libstdc++-v3/src/compatibility-c++0x.cc16
-rw-r--r--libstdc++-v3/src/compatibility.cc19
3 files changed, 47 insertions, 31 deletions
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 @@
// <http://www.gnu.org/licenses/>.
#include "gstdint.h"
-#include <cstdatomic>
+#include <atomic>
#include <mutex>
#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<mutex> __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<mutex> __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<volatile atomic_flag*>(__a);
+ atomic_flag* d = static_cast<volatile atomic_flag*>(__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<volatile atomic_flag*>(__a);
+ atomic_flag* d = static_cast<volatile atomic_flag*>(__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<uintptr_t>(__z);
__u += (__u >> 2) + (__u << 4);
@@ -114,3 +114,24 @@ namespace std
}
} // extern "C"
} // namespace std
+
+
+// XXX GLIBCXX_ABI Deprecated
+// gcc-4.5.0
+// <atomic> 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
+ // <mutex> 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<typename _Tp>
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
-// <mutex> 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