aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include
diff options
context:
space:
mode:
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2009-10-18 03:30:03 +0000
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2009-10-18 03:30:03 +0000
commit05b9bc744ee6454ed7df0ac70c0ccaf87f1ee920 (patch)
treeff4db22cfd222d5b80ea04136ecf6c5e6ba0383f /libstdc++-v3/include
parent48fda7f241beb3ae1e77daf7b1de21bfb1d9b811 (diff)
2009-10-16 Benjamin Kosnik <bkoz@redhat.com>
* include/c_compatibility/stdatomic.h: Include cstdatomic if __cplusplus. 2009-10-15 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/40654 PR libstdc++/40826 * src/atomic.cc (atomic_flag_test_and_set_explicit): Add static_cast from base to derived. (atomic_flag_clear_explicit): Same. * include/bits/atomic_2.h (__atomic2::atomic_flag): Public derivation. Remove value type constructor. * include/bits/atomic_0.h (__atomic0::atomic_flag): Same. * include/std/future (_Future_state): Use ATOMIC_FLAG_INIT to initialized the atomic_flag member. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch@152965 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r--libstdc++-v3/include/bits/atomic_0.h5
-rw-r--r--libstdc++-v3/include/bits/atomic_2.h5
-rw-r--r--libstdc++-v3/include/c_compatibility/stdatomic.h7
3 files changed, 11 insertions, 6 deletions
diff --git a/libstdc++-v3/include/bits/atomic_0.h b/libstdc++-v3/include/bits/atomic_0.h
index a493ea66af9..0caffaf1e9f 100644
--- a/libstdc++-v3/include/bits/atomic_0.h
+++ b/libstdc++-v3/include/bits/atomic_0.h
@@ -82,14 +82,15 @@ namespace __atomic0
__r; })
/// atomic_flag
- struct atomic_flag : private __atomic_flag_base
+ struct atomic_flag : public __atomic_flag_base
{
atomic_flag() = default;
~atomic_flag() = default;
atomic_flag(const atomic_flag&) = delete;
atomic_flag& operator=(const atomic_flag&) = delete;
- atomic_flag(bool __i) { _M_i = __i; } // XXX deleted copy ctor != agg
+ // Conversion to ATOMIC_FLAG_INIT.
+ atomic_flag(bool __i): __atomic_flag_base({ __i }) { }
bool
test_and_set(memory_order __m = memory_order_seq_cst) volatile;
diff --git a/libstdc++-v3/include/bits/atomic_2.h b/libstdc++-v3/include/bits/atomic_2.h
index 8e8e7ff16f8..d39adb920a2 100644
--- a/libstdc++-v3/include/bits/atomic_2.h
+++ b/libstdc++-v3/include/bits/atomic_2.h
@@ -44,14 +44,15 @@
namespace __atomic2
{
/// atomic_flag
- struct atomic_flag : private __atomic_flag_base
+ struct atomic_flag : public __atomic_flag_base
{
atomic_flag() = default;
~atomic_flag() = default;
atomic_flag(const atomic_flag&) = delete;
atomic_flag& operator=(const atomic_flag&) = delete;
- atomic_flag(bool __i) { _M_i = __i; } // XXX deleted copy ctor != agg
+ // Conversion to ATOMIC_FLAG_INIT.
+ atomic_flag(bool __i): __atomic_flag_base({ __i }) { }
bool
test_and_set(memory_order __m = memory_order_seq_cst) volatile
diff --git a/libstdc++-v3/include/c_compatibility/stdatomic.h b/libstdc++-v3/include/c_compatibility/stdatomic.h
index 71ddb8507a4..ecbacc951ad 100644
--- a/libstdc++-v3/include/c_compatibility/stdatomic.h
+++ b/libstdc++-v3/include/c_compatibility/stdatomic.h
@@ -186,8 +186,11 @@ _GLIBCXX_BEGIN_EXTERN_C
_GLIBCXX_END_EXTERN_C
_GLIBCXX_END_NAMESPACE
-// Inject into global namespace. XXX
-#if defined(__cplusplus) && !defined(_GLIBCXX_STDATOMIC)
+// Inject into global namespace.
+#ifdef __cplusplus
+
+#include <cstdatomic>
+
using std::memory_order;
using std::memory_order_relaxed;
using std::memory_order_consume;