From ac2e5c890aa795612105a0c4d4ab48a57e5c60fd Mon Sep 17 00:00:00 2001
From: Benjamin Kosnik <bkoz@redhat.com>
Date: Tue, 22 Dec 2009 08:23:08 +0000
Subject: [PATCH] re PR libstdc++/42456 (Revision 155377 failed some C++ atomic
 tests)

2009-12-21  Benjamin Kosnik  <bkoz@redhat.com>

	PR libstdc++/42456
	* src/atomic.cc: Move _GLIBCXX_ASM_SYMVER define within guard.
	* config/abi/pre/gnu.ver: Add non-volatile exports.

From-SVN: r155393
---
 libstdc++-v3/ChangeLog              |  6 ++++++
 libstdc++-v3/config/abi/pre/gnu.ver |  4 ++++
 libstdc++-v3/src/atomic.cc          | 16 +++++++++-------
 3 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 5c68811e3b97..fca9703309bf 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-21  Benjamin Kosnik  <bkoz@redhat.com>
+
+	PR libstdc++/42456
+	* src/atomic.cc: Move _GLIBCXX_ASM_SYMVER define within guard.
+	* config/abi/pre/gnu.ver: Add non-volatile exports.
+
 2009-12-21  Benjamin Kosnik  <bkoz@redhat.com>
 
 	* scripts/run_doxygen: Update nested namespace exceptions.
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index cbd0596fa9b2..2d4b0c3c3631 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -1050,6 +1050,10 @@ GLIBCXX_3.4.13 {
 
 GLIBCXX_3.4.14 {
 
+    # atomic
+    _ZNSt9__atomic011atomic_flag12test_and_setESt12memory_order;
+    _ZNSt9__atomic011atomic_flag5clearESt12memory_order;
+
     # future
     _ZSt15future_category;
     _ZNSt12future_errorD*;
diff --git a/libstdc++-v3/src/atomic.cc b/libstdc++-v3/src/atomic.cc
index bff8fa98c647..7ec08c5d7c0c 100644
--- a/libstdc++-v3/src/atomic.cc
+++ b/libstdc++-v3/src/atomic.cc
@@ -78,15 +78,15 @@ namespace std
   {
     bool
     atomic_flag_test_and_set_explicit(__atomic_flag_base* __a,
-				      memory_order __m) throw ()
+				      memory_order __m) throw()
     {
       atomic_flag* d = static_cast<volatile atomic_flag*>(__a);
       return d->test_and_set(__m);
     }
 
     void
-    atomic_flag_clear_explicit(__atomic_flag_base* __a,
-			       memory_order __m) throw ()
+    atomic_flag_clear_explicit(__atomic_flag_base* __a, 
+			       memory_order __m) throw()
     {
       atomic_flag* d = static_cast<volatile atomic_flag*>(__a);
       return d->clear(__m);
@@ -94,14 +94,14 @@ namespace std
 
     void
     __atomic_flag_wait_explicit(__atomic_flag_base* __a,
-				memory_order __x) throw ()
+				memory_order __x) throw()
     {
       while (atomic_flag_test_and_set_explicit(__a, __x))
 	{ };
     }
 
     __atomic_flag_base*
-    __atomic_flag_for_address(const void* __z) throw ()
+    __atomic_flag_for_address(const void* __z) throw()
     {
       uintptr_t __u = reinterpret_cast<uintptr_t>(__z);
       __u += (__u >> 2) + (__u << 4);
@@ -126,12 +126,14 @@ namespace std
 // In the future, GLIBCXX_ABI > 6 should remove all uses of
 // _GLIBCXX_*_SYMVER macros in this file.
 
+#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \
+    && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE)
+
 #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
-- 
GitLab