libstdc++: Use __GCC_ATOMIC_TEST_AND_SET in atomic_flag.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Jan 2012 21:50:52 +0000 (21:50 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Jan 2012 21:50:52 +0000 (21:50 +0000)
        * include/bits/atomic_base.h (__atomic_flag_base): Define _M_i
        based on the value of __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.
        (ATOMIC_FLAG_INIT): Initialize with 0, not false.
        (atomic_flag::atomic_flag): Use __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183582 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/atomic_base.h

index b9cca6a..67e5b89 100644 (file)
@@ -1,3 +1,10 @@
+2012-01-27  Richard Henderson  <rth@redhat.com>
+
+       * include/bits/atomic_base.h (__atomic_flag_base): Define _M_i
+       based on the value of __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.
+       (ATOMIC_FLAG_INIT): Initialize with 0, not false.
+       (atomic_flag::atomic_flag): Use __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.
+
 2012-01-26  Jakub Jelinek  <jakub@redhat.com>
 
        PR bootstrap/51985
index ef17b7e..aa43bcc 100644 (file)
@@ -227,12 +227,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   struct __atomic_flag_base
   {
+    /* The target's "set" value for test-and-set may not be exactly 1.  */
+#if __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1
     bool _M_i;
+#else
+    unsigned char _M_i;
+#endif
   };
 
   _GLIBCXX_END_EXTERN_C
 
-#define ATOMIC_FLAG_INIT { false }
+#define ATOMIC_FLAG_INIT { 0 }
 
   /// atomic_flag
   struct atomic_flag : public __atomic_flag_base
@@ -244,7 +249,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     atomic_flag& operator=(const atomic_flag&) volatile = delete;
 
     // Conversion to ATOMIC_FLAG_INIT.
-    atomic_flag(bool __i) noexcept : __atomic_flag_base({ __i }) { }
+    constexpr atomic_flag(bool __i) noexcept
+      : __atomic_flag_base({ __i ? __GCC_ATOMIC_TEST_AND_SET_TRUEVAL : 0 })
+    { }
 
     bool
     test_and_set(memory_order __m = memory_order_seq_cst) noexcept