diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 2077dc14ec70fb5c2703f86dc6c674bc90598068..50840c71a62ea26ccc1b05109d83eb47e24ff6f3 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,86 @@
+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.
+
 2009-12-18  Jimmy Guo  <jguo@yahoo-inc.com>
 
 	PR libstdc++/40088
diff --git a/libstdc++-v3/doc/doxygen/user.cfg.in b/libstdc++-v3/doc/doxygen/user.cfg.in
index 649b84d3797717f6b5a7951c6c6e48dad662b906..34795fa0a901bcad5e5c07fa7e906d0f891b7efd 100644
--- a/libstdc++-v3/doc/doxygen/user.cfg.in
+++ b/libstdc++-v3/doc/doxygen/user.cfg.in
@@ -580,6 +580,7 @@ INPUT                  = @srcdir@/doc/doxygen/doxygroups.cc \
                          @srcdir@/libsupc++/typeinfo \
                          include/algorithm \
                          include/array \
+                         include/atomic \
                          include/bitset \
                          include/chrono \
                          include/complex \
@@ -635,7 +636,6 @@ INPUT                  = @srcdir@/doc/doxygen/doxygroups.cc \
                          include/csetjmp \
                          include/csignal \
                          include/cstdarg \
-                         include/cstdatomic \
                          include/cstdbool \
                          include/cstddef \
                          include/cstdint \
diff --git a/libstdc++-v3/doc/xml/manual/status_cxx200x.xml b/libstdc++-v3/doc/xml/manual/status_cxx200x.xml
index 61b2ec2c2abf58fadc9a607ba6ef27c7e8d24969..b7c0fac9431b89685ada3a19ecd69f33dc89c8b4 100644
--- a/libstdc++-v3/doc/xml/manual/status_cxx200x.xml
+++ b/libstdc++-v3/doc/xml/manual/status_cxx200x.xml
@@ -2200,7 +2200,7 @@ particular release.
     </row>
     <row>
       <entry>29.2</entry>
-      <entry>Header <code>&lt;cstdatomic&gt;</code> synopsis</entry>
+      <entry>Header <code>&lt;atomic&gt;</code> synopsis</entry>
       <entry>Y</entry>
       <entry></entry>
     </row>
diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
index d9ff8cadef4da0fc1616694fd615280c5091d0e9..cab3d0bf91dd2e8a5b24231355a2816c8df4b22f 100644
--- a/libstdc++-v3/doc/xml/manual/using.xml
+++ b/libstdc++-v3/doc/xml/manual/using.xml
@@ -329,24 +329,23 @@ mode, i.e. <literal>-std=c++0x</literal> or <literal>-std=gnu++0x</literal>.
 <entry><filename class="headerfile">csetjmp</filename></entry>
 <entry><filename class="headerfile">csignal</filename></entry>
 <entry><filename class="headerfile">cstdarg</filename></entry>
-<entry><filename class="headerfile">cstdatomic</filename></entry>
+<entry><filename class="headerfile">cstdbool</filename></entry>
 </row>
 <row>
-<entry><filename class="headerfile">cstdbool</filename></entry>
 <entry><filename class="headerfile">cstddef</filename></entry>
 <entry><filename class="headerfile">cstdint</filename></entry>
 <entry><filename class="headerfile">cstdlib</filename></entry>
 <entry><filename class="headerfile">cstdio</filename></entry>
+<entry><filename class="headerfile">cstring</filename></entry>
 </row>
 <row>
-<entry><filename class="headerfile">cstring</filename></entry>
 <entry><filename class="headerfile">ctgmath</filename></entry>
 <entry><filename class="headerfile">ctime</filename></entry>
 <entry><filename class="headerfile">cuchar</filename></entry>
 <entry><filename class="headerfile">cwchar</filename></entry>
+<entry><filename class="headerfile">cwctype</filename></entry>
 </row>
 <row>
-<entry><filename class="headerfile">cwctype</filename></entry>
 <entry><filename class="headerfile">stdatomic.h</filename></entry>
 </row>
 
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 8d4ece7ee448aeeed1d19559f89e3ef66c4cbe80..69f90a43367e1b7ea1a2099f918ab219993869c8 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -29,6 +29,7 @@ std_builddir = .
 std_headers = \
 	${std_srcdir}/algorithm \
 	${std_srcdir}/array \
+	${std_srcdir}/atomic \
 	${std_srcdir}/bitset \
 	${std_srcdir}/c++0x_warning.h \
 	${std_srcdir}/chrono \
@@ -78,6 +79,7 @@ bits_builddir = ./bits
 bits_headers = \
         ${bits_srcdir}/algorithmfwd.h \
 	${bits_srcdir}/allocator.h \
+	${bits_srcdir}/atomic_base.h \
 	${bits_srcdir}/atomicfwd_c.h \
 	${bits_srcdir}/atomicfwd_cxx.h \
 	${bits_srcdir}/atomic_0.h \
@@ -641,7 +643,6 @@ c_base_headers = \
 	${c_base_srcdir}/csetjmp \
 	${c_base_srcdir}/csignal \
 	${c_base_srcdir}/cstdarg \
-	${c_base_srcdir}/cstdatomic \
 	${c_base_srcdir}/cstdbool \
 	${c_base_srcdir}/cstddef \
 	${c_base_srcdir}/cstdint \
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 892fb3b949b9c8d9c9c830bd9026112ef85b0e57..1a25e1e0f99607da0f5ddaffb617c4fa5d9a2d19 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -271,6 +271,7 @@ std_builddir = .
 std_headers = \
 	${std_srcdir}/algorithm \
 	${std_srcdir}/array \
+	${std_srcdir}/atomic \
 	${std_srcdir}/bitset \
 	${std_srcdir}/c++0x_warning.h \
 	${std_srcdir}/chrono \
@@ -320,6 +321,7 @@ bits_builddir = ./bits
 bits_headers = \
         ${bits_srcdir}/algorithmfwd.h \
 	${bits_srcdir}/allocator.h \
+	${bits_srcdir}/atomic_base.h \
 	${bits_srcdir}/atomicfwd_c.h \
 	${bits_srcdir}/atomicfwd_cxx.h \
 	${bits_srcdir}/atomic_0.h \
@@ -881,7 +883,6 @@ c_base_headers = \
 	${c_base_srcdir}/csetjmp \
 	${c_base_srcdir}/csignal \
 	${c_base_srcdir}/cstdarg \
-	${c_base_srcdir}/cstdatomic \
 	${c_base_srcdir}/cstdbool \
 	${c_base_srcdir}/cstddef \
 	${c_base_srcdir}/cstdint \
diff --git a/libstdc++-v3/include/bits/atomic_0.h b/libstdc++-v3/include/bits/atomic_0.h
index 0caffaf1e9fb91d3355e2e95498729ed6b0e48f0..a39de4a79269779ba2594367653d20529d3549a3 100644
--- a/libstdc++-v3/include/bits/atomic_0.h
+++ b/libstdc++-v3/include/bits/atomic_0.h
@@ -42,26 +42,26 @@ namespace __atomic0
 
   // Implementation specific defines.
 #define _ATOMIC_LOAD_(__a, __x)						   \
-  ({ volatile __typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	   \
-    volatile __atomic_flag_base* __g = __atomic_flag_for_address(__p);     \
+  ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	   		   \
+    __atomic_flag_base* __g = __atomic_flag_for_address(__p);	  	   \
     __atomic_flag_wait_explicit(__g, __x);				   \
     __typeof__ _ATOMIC_MEMBER_ __r = *__p;				   \
     atomic_flag_clear_explicit(__g, __x);		       		   \
     __r; })
 
 #define _ATOMIC_STORE_(__a, __m, __x)					   \
-  ({ volatile __typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	   \
+  ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	   		   \
     __typeof__(__m) __v = (__m);			       		   \
-    volatile __atomic_flag_base* __g = __atomic_flag_for_address(__p);     \
+    __atomic_flag_base* __g = __atomic_flag_for_address(__p);	  	   \
     __atomic_flag_wait_explicit(__g, __x);				   \
     *__p = __v;								   \
     atomic_flag_clear_explicit(__g, __x);		       		   \
     __v; })
 
 #define _ATOMIC_MODIFY_(__a, __o, __m, __x)				   \
-  ({ volatile __typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	   \
+  ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	   		   \
     __typeof__(__m) __v = (__m);			       		   \
-    volatile __atomic_flag_base* __g = __atomic_flag_for_address(__p);     \
+    __atomic_flag_base* __g = __atomic_flag_for_address(__p);	  	   \
     __atomic_flag_wait_explicit(__g, __x);				   \
     __typeof__ _ATOMIC_MEMBER_ __r = *__p;				   \
     *__p __o __v;					       		   \
@@ -69,11 +69,11 @@ namespace __atomic0
     __r; })
 
 #define _ATOMIC_CMPEXCHNG_(__a, __e, __m, __x)				   \
-  ({ volatile __typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	   \
+  ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	   		   \
     __typeof__(__e) __q = (__e);			       		   \
     __typeof__(__m) __v = (__m);			       		   \
     bool __r;						       		   \
-    volatile __atomic_flag_base* __g = __atomic_flag_for_address(__p);     \
+    __atomic_flag_base* __g = __atomic_flag_for_address(__p);	   	   \
     __atomic_flag_wait_explicit(__g, __x);				   \
     __typeof__ _ATOMIC_MEMBER_ __t__ = *__p;		       		   \
     if (__t__ == *__q) { *__p = __v; __r = true; }			   \
@@ -87,16 +87,16 @@ namespace __atomic0
     atomic_flag() = default;
     ~atomic_flag() = default;
     atomic_flag(const atomic_flag&) = delete;
-    atomic_flag& operator=(const atomic_flag&) = delete;
+    atomic_flag& operator=(const atomic_flag&) volatile = delete;
 
     // 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;
+    test_and_set(memory_order __m = memory_order_seq_cst);
 
     void
-    clear(memory_order __m = memory_order_seq_cst) volatile;
+    clear(memory_order __m = memory_order_seq_cst);
   };
 
   /// 29.4.2, address types
@@ -109,16 +109,16 @@ namespace __atomic0
     atomic_address() = default;
     ~atomic_address() = default;
     atomic_address(const atomic_address&) = delete;
-    atomic_address& operator=(const atomic_address&) = delete;
+    atomic_address& operator=(const atomic_address&) volatile = delete;
 
     atomic_address(void* __v) { _M_i = __v; }
 
     bool
-    is_lock_free() const volatile
+    is_lock_free() const
     { return false; }
 
     void
-    store(void* __v, memory_order __m = memory_order_seq_cst) volatile
+    store(void* __v, memory_order __m = memory_order_seq_cst)
     {
       __glibcxx_assert(__m != memory_order_acquire);
       __glibcxx_assert(__m != memory_order_acq_rel);
@@ -127,7 +127,7 @@ namespace __atomic0
     }
 
     void*
-    load(memory_order __m = memory_order_seq_cst) const volatile
+    load(memory_order __m = memory_order_seq_cst) const
     {
       __glibcxx_assert(__m != memory_order_release);
       __glibcxx_assert(__m != memory_order_acq_rel);
@@ -135,12 +135,12 @@ namespace __atomic0
     }
 
     void*
-    exchange(void* __v, memory_order __m = memory_order_seq_cst) volatile
+    exchange(void* __v, memory_order __m = memory_order_seq_cst)
     { return _ATOMIC_MODIFY_(this, =, __v, __m); }
 
     bool
     compare_exchange_weak(void*& __v1, void* __v2, memory_order __m1,
-			  memory_order __m2) volatile
+			  memory_order __m2)
     {
       __glibcxx_assert(__m2 != memory_order_release);
       __glibcxx_assert(__m2 != memory_order_acq_rel);
@@ -150,7 +150,7 @@ namespace __atomic0
 
     bool
     compare_exchange_weak(void*& __v1, void* __v2,
-			  memory_order __m = memory_order_seq_cst) volatile
+			  memory_order __m = memory_order_seq_cst)
     {
       return compare_exchange_weak(__v1, __v2, __m,
 				   __calculate_memory_order(__m));
@@ -158,7 +158,7 @@ namespace __atomic0
 
     bool
     compare_exchange_strong(void*& __v1, void* __v2, memory_order __m1,
-			    memory_order __m2) volatile
+			    memory_order __m2)
     {
       __glibcxx_assert(__m2 != memory_order_release);
       __glibcxx_assert(__m2 != memory_order_acq_rel);
@@ -168,17 +168,17 @@ namespace __atomic0
 
     bool
     compare_exchange_strong(void*& __v1, void* __v2,
-			  memory_order __m = memory_order_seq_cst) volatile
+			  memory_order __m = memory_order_seq_cst)
     {
       return compare_exchange_strong(__v1, __v2, __m,
 				     __calculate_memory_order(__m));
     }
 
     void*
-    fetch_add(ptrdiff_t __d, memory_order __m = memory_order_seq_cst) volatile
+    fetch_add(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
     {
-      void* volatile* __p = &(_M_i);
-      volatile __atomic_flag_base* __g = __atomic_flag_for_address(__p);
+      void** __p = &(_M_i);
+      __atomic_flag_base* __g = __atomic_flag_for_address(__p);
       __atomic_flag_wait_explicit(__g, __m);
       void* __r = *__p;
       *__p = (void*)((char*)(*__p) + __d);
@@ -187,10 +187,10 @@ namespace __atomic0
     }
 
     void*
-    fetch_sub(ptrdiff_t __d, memory_order __m = memory_order_seq_cst) volatile
+    fetch_sub(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
     {
-      void* volatile* __p = &(_M_i);
-      volatile __atomic_flag_base* __g = __atomic_flag_for_address(__p);
+      void** __p = &(_M_i);
+      __atomic_flag_base* __g = __atomic_flag_for_address(__p);
       __atomic_flag_wait_explicit(__g, __m);
       void* __r = *__p;
       *__p = (void*)((char*)(*__p) - __d);
@@ -198,22 +198,22 @@ namespace __atomic0
       return __r;
     }
 
-    operator void*() const volatile
+    operator void*() const
     { return load(); }
 
     void*
-    operator=(void* __v) // XXX volatile
+    operator=(void* __v)
     {
       store(__v);
       return __v;
     }
 
     void*
-    operator+=(ptrdiff_t __d) volatile
+    operator+=(ptrdiff_t __d)
     { return fetch_add(__d) + __d; }
 
     void*
-    operator-=(ptrdiff_t __d) volatile
+    operator-=(ptrdiff_t __d)
     { return fetch_sub(__d) - __d; }
   };
 
@@ -252,64 +252,63 @@ namespace __atomic0
       __atomic_base() = default;
       ~__atomic_base() = default;
       __atomic_base(const __atomic_base&) = delete;
-      __atomic_base& operator=(const __atomic_base&) = delete;
+      __atomic_base& operator=(const __atomic_base&) volatile = delete;
 
       // Requires __integral_type convertible to _M_base._M_i.
       __atomic_base(__integral_type __i) { _M_i = __i; }
 
-      operator __integral_type() const volatile
+      operator __integral_type() const
       { return load(); }
 
       __integral_type
-      operator=(__integral_type __i) // XXX volatile
+      operator=(__integral_type __i)
       {
 	store(__i);
 	return __i;
       }
 
       __integral_type
-      operator++(int) volatile
+      operator++(int)
       { return fetch_add(1); }
 
       __integral_type
-      operator--(int) volatile
+      operator--(int)
       { return fetch_sub(1); }
 
       __integral_type
-      operator++() volatile
+      operator++()
       { return fetch_add(1) + 1; }
 
       __integral_type
-      operator--() volatile
+      operator--()
       { return fetch_sub(1) - 1; }
 
       __integral_type
-      operator+=(__integral_type __i) volatile
+      operator+=(__integral_type __i)
       { return fetch_add(__i) + __i; }
 
       __integral_type
-      operator-=(__integral_type __i) volatile
+      operator-=(__integral_type __i)
       { return fetch_sub(__i) - __i; }
 
       __integral_type
-      operator&=(__integral_type __i) volatile
+      operator&=(__integral_type __i)
       { return fetch_and(__i) & __i; }
 
       __integral_type
-      operator|=(__integral_type __i) volatile
+      operator|=(__integral_type __i)
       { return fetch_or(__i) | __i; }
 
       __integral_type
-      operator^=(__integral_type __i) volatile
+      operator^=(__integral_type __i)
       { return fetch_xor(__i) ^ __i; }
 
       bool
-      is_lock_free() const volatile
+      is_lock_free() const
       { return false; }
 
       void
-      store(__integral_type __i,
-	    memory_order __m = memory_order_seq_cst) volatile
+      store(__integral_type __i, memory_order __m = memory_order_seq_cst)
       {
 	__glibcxx_assert(__m != memory_order_acquire);
 	__glibcxx_assert(__m != memory_order_acq_rel);
@@ -318,7 +317,7 @@ namespace __atomic0
       }
 
       __integral_type
-      load(memory_order __m = memory_order_seq_cst) const volatile
+      load(memory_order __m = memory_order_seq_cst) const
       {
 	__glibcxx_assert(__m != memory_order_release);
 	__glibcxx_assert(__m != memory_order_acq_rel);
@@ -326,13 +325,12 @@ namespace __atomic0
       }
 
       __integral_type
-      exchange(__integral_type __i,
-	       memory_order __m = memory_order_seq_cst) volatile
+      exchange(__integral_type __i, memory_order __m = memory_order_seq_cst)
       { return _ATOMIC_MODIFY_(this, =, __i, __m); }
 
       bool
       compare_exchange_weak(__integral_type& __i1, __integral_type __i2,
-			    memory_order __m1, memory_order __m2) volatile
+			    memory_order __m1, memory_order __m2)
       {
 	__glibcxx_assert(__m2 != memory_order_release);
 	__glibcxx_assert(__m2 != memory_order_acq_rel);
@@ -342,7 +340,7 @@ namespace __atomic0
 
       bool
       compare_exchange_weak(__integral_type& __i1, __integral_type __i2,
-			    memory_order __m = memory_order_seq_cst) volatile
+			    memory_order __m = memory_order_seq_cst)
       {
 	return compare_exchange_weak(__i1, __i2, __m,
 				     __calculate_memory_order(__m));
@@ -350,7 +348,7 @@ namespace __atomic0
 
       bool
       compare_exchange_strong(__integral_type& __i1, __integral_type __i2,
-			      memory_order __m1, memory_order __m2) volatile
+			      memory_order __m1, memory_order __m2)
       {
 	__glibcxx_assert(__m2 != memory_order_release);
 	__glibcxx_assert(__m2 != memory_order_acq_rel);
@@ -360,35 +358,30 @@ namespace __atomic0
 
       bool
       compare_exchange_strong(__integral_type& __i1, __integral_type __i2,
-			      memory_order __m = memory_order_seq_cst) volatile
+			      memory_order __m = memory_order_seq_cst)
       {
 	return compare_exchange_strong(__i1, __i2, __m,
 				       __calculate_memory_order(__m));
       }
 
       __integral_type
-      fetch_add(__integral_type __i,
-		memory_order __m = memory_order_seq_cst) volatile
+      fetch_add(__integral_type __i, memory_order __m = memory_order_seq_cst)
       { return _ATOMIC_MODIFY_(this, +=, __i, __m); }
 
       __integral_type
-      fetch_sub(__integral_type __i,
-		memory_order __m = memory_order_seq_cst) volatile
+      fetch_sub(__integral_type __i, memory_order __m = memory_order_seq_cst)
       { return _ATOMIC_MODIFY_(this, -=, __i, __m); }
 
       __integral_type
-      fetch_and(__integral_type __i,
-		memory_order __m = memory_order_seq_cst) volatile
+      fetch_and(__integral_type __i, memory_order __m = memory_order_seq_cst)
       { return _ATOMIC_MODIFY_(this, &=, __i, __m); }
 
       __integral_type
-      fetch_or(__integral_type __i,
-	       memory_order __m = memory_order_seq_cst) volatile
+      fetch_or(__integral_type __i, memory_order __m = memory_order_seq_cst)
       { return _ATOMIC_MODIFY_(this, |=, __i, __m); }
 
       __integral_type
-      fetch_xor(__integral_type __i,
-		memory_order __m = memory_order_seq_cst) volatile
+      fetch_xor(__integral_type __i, memory_order __m = memory_order_seq_cst)
       { return _ATOMIC_MODIFY_(this, ^=, __i, __m); }
     };
 
@@ -404,52 +397,52 @@ namespace __atomic0
     atomic_bool() = default;
     ~atomic_bool() = default;
     atomic_bool(const atomic_bool&) = delete;
-    atomic_bool& operator=(const atomic_bool&) = delete;
+    atomic_bool& operator=(const atomic_bool&) volatile = delete;
 
     atomic_bool(bool __i) : _M_base(__i) { }
 
     bool
-    operator=(bool __i) // XXX volatile
+    operator=(bool __i)
     { return _M_base.operator=(__i); }
 
-    operator bool() const volatile
+    operator bool() const
     { return _M_base.load(); }
 
     bool
-    is_lock_free() const volatile
+    is_lock_free() const
     { return _M_base.is_lock_free(); }
 
     void
-    store(bool __i, memory_order __m = memory_order_seq_cst) volatile
+    store(bool __i, memory_order __m = memory_order_seq_cst)
     { _M_base.store(__i, __m); }
 
     bool
-    load(memory_order __m = memory_order_seq_cst) const volatile
+    load(memory_order __m = memory_order_seq_cst) const
     { return _M_base.load(__m); }
 
     bool
-    exchange(bool __i, memory_order __m = memory_order_seq_cst) volatile
+    exchange(bool __i, memory_order __m = memory_order_seq_cst)
     { return _M_base.exchange(__i, __m); }
 
     bool
     compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
-			  memory_order __m2) volatile
+			  memory_order __m2)
     { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
 
     bool
     compare_exchange_weak(bool& __i1, bool __i2,
-			  memory_order __m = memory_order_seq_cst) volatile
+			  memory_order __m = memory_order_seq_cst)
     { return _M_base.compare_exchange_weak(__i1, __i2, __m); }
 
     bool
     compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
-			    memory_order __m2) volatile
+			    memory_order __m2)
     { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
 
 
     bool
     compare_exchange_strong(bool& __i1, bool __i2,
-			    memory_order __m = memory_order_seq_cst) volatile
+			    memory_order __m = memory_order_seq_cst)
     { return _M_base.compare_exchange_strong(__i1, __i2, __m); }
   };
 
diff --git a/libstdc++-v3/include/bits/atomic_2.h b/libstdc++-v3/include/bits/atomic_2.h
index 2815d599b4231b6addd4d383b8c3fa18f54d8acc..fa6c0d5b9d6a1c70c9b80b77c58157dba075a25a 100644
--- a/libstdc++-v3/include/bits/atomic_2.h
+++ b/libstdc++-v3/include/bits/atomic_2.h
@@ -49,13 +49,13 @@ namespace __atomic2
     atomic_flag() = default;
     ~atomic_flag() = default;
     atomic_flag(const atomic_flag&) = delete;
-    atomic_flag& operator=(const atomic_flag&) = delete;
+    atomic_flag& operator=(const atomic_flag&) volatile = delete;
 
     // 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
+    test_and_set(memory_order __m = memory_order_seq_cst)
     {
       // Redundant synchronize if built-in for lock is a full barrier.
       if (__m != memory_order_acquire && __m != memory_order_acq_rel)
@@ -64,7 +64,7 @@ namespace __atomic2
     }
 
     void
-    clear(memory_order __m = memory_order_seq_cst) volatile
+    clear(memory_order __m = memory_order_seq_cst)
     {
       __glibcxx_assert(__m != memory_order_consume);
       __glibcxx_assert(__m != memory_order_acquire);
@@ -87,16 +87,16 @@ namespace __atomic2
     atomic_address() = default;
     ~atomic_address() = default;
     atomic_address(const atomic_address&) = delete;
-    atomic_address& operator=(const atomic_address&) = delete;
+    atomic_address& operator=(const atomic_address&) volatile = delete;
 
     atomic_address(void* __v) { _M_i = __v; }
 
     bool
-    is_lock_free() const volatile
+    is_lock_free() const
     { return true; }
 
     void
-    store(void* __v, memory_order __m = memory_order_seq_cst) volatile
+    store(void* __v, memory_order __m = memory_order_seq_cst)
     {
       __glibcxx_assert(__m != memory_order_acquire);
       __glibcxx_assert(__m != memory_order_acq_rel);
@@ -114,7 +114,7 @@ namespace __atomic2
     }
 
     void*
-    load(memory_order __m = memory_order_seq_cst) const volatile
+    load(memory_order __m = memory_order_seq_cst) const
     {
       __glibcxx_assert(__m != memory_order_release);
       __glibcxx_assert(__m != memory_order_acq_rel);
@@ -126,7 +126,7 @@ namespace __atomic2
     }
 
     void*
-    exchange(void* __v, memory_order __m = memory_order_seq_cst) volatile
+    exchange(void* __v, memory_order __m = memory_order_seq_cst)
     {
       // XXX built-in assumes memory_order_acquire.
       return __sync_lock_test_and_set(&_M_i, __v);
@@ -134,12 +134,12 @@ namespace __atomic2
 
     bool
     compare_exchange_weak(void*& __v1, void* __v2, memory_order __m1,
-			  memory_order __m2) volatile
+			  memory_order __m2)
     { return compare_exchange_strong(__v1, __v2, __m1, __m2); }
 
     bool
     compare_exchange_weak(void*& __v1, void* __v2,
-			  memory_order __m = memory_order_seq_cst) volatile
+			  memory_order __m = memory_order_seq_cst)
     {
       return compare_exchange_weak(__v1, __v2, __m,
 				   __calculate_memory_order(__m));
@@ -147,7 +147,7 @@ namespace __atomic2
 
     bool
     compare_exchange_strong(void*& __v1, void* __v2, memory_order __m1,
-			    memory_order __m2) volatile
+			    memory_order __m2)
     {
       __glibcxx_assert(__m2 != memory_order_release);
       __glibcxx_assert(__m2 != memory_order_acq_rel);
@@ -163,36 +163,36 @@ namespace __atomic2
 
     bool
     compare_exchange_strong(void*& __v1, void* __v2,
-			  memory_order __m = memory_order_seq_cst) volatile
+			  memory_order __m = memory_order_seq_cst)
     {
       return compare_exchange_strong(__v1, __v2, __m,
 				     __calculate_memory_order(__m));
     }
 
     void*
-    fetch_add(ptrdiff_t __d, memory_order __m = memory_order_seq_cst) volatile
+    fetch_add(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
     { return __sync_fetch_and_add(&_M_i, __d); }
 
     void*
-    fetch_sub(ptrdiff_t __d, memory_order __m = memory_order_seq_cst) volatile
+    fetch_sub(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
     { return __sync_fetch_and_sub(&_M_i, __d); }
 
-    operator void*() const volatile
+    operator void*() const
     { return load(); }
 
     void*
-    operator=(void* __v) // XXX volatile
+    operator=(void* __v)
     {
       store(__v);
       return __v;
     }
 
     void*
-    operator+=(ptrdiff_t __d) volatile
+    operator+=(ptrdiff_t __d)
     { return __sync_add_and_fetch(&_M_i, __d); }
 
     void*
-    operator-=(ptrdiff_t __d) volatile
+    operator-=(ptrdiff_t __d)
     { return __sync_sub_and_fetch(&_M_i, __d); }
   };
 
@@ -230,64 +230,63 @@ namespace __atomic2
       __atomic_base() = default;
       ~__atomic_base() = default;
       __atomic_base(const __atomic_base&) = delete;
-      __atomic_base& operator=(const __atomic_base&) = delete;
+      __atomic_base& operator=(const __atomic_base&) volatile = delete;
 
       // Requires __integral_type convertible to _M_base._M_i.
       __atomic_base(__integral_type __i) { _M_i = __i; }
 
-      operator __integral_type() const volatile
+      operator __integral_type() const
       { return load(); }
 
       __integral_type
-      operator=(__integral_type __i) // XXX volatile
+      operator=(__integral_type __i)
       {
 	store(__i);
 	return __i;
       }
 
       __integral_type
-      operator++(int) volatile
+      operator++(int)
       { return fetch_add(1); }
 
       __integral_type
-      operator--(int) volatile
+      operator--(int)
       { return fetch_sub(1); }
 
       __integral_type
-      operator++() volatile
+      operator++()
       { return __sync_add_and_fetch(&_M_i, 1); }
 
       __integral_type
-      operator--() volatile
+      operator--()
       { return __sync_sub_and_fetch(&_M_i, 1); }
 
       __integral_type
-      operator+=(__integral_type __i) volatile
+      operator+=(__integral_type __i)
       { return __sync_add_and_fetch(&_M_i, __i); }
 
       __integral_type
-      operator-=(__integral_type __i) volatile
+      operator-=(__integral_type __i)
       { return __sync_sub_and_fetch(&_M_i, __i); }
 
       __integral_type
-      operator&=(__integral_type __i) volatile
+      operator&=(__integral_type __i)
       { return __sync_and_and_fetch(&_M_i, __i); }
 
       __integral_type
-      operator|=(__integral_type __i) volatile
+      operator|=(__integral_type __i)
       { return __sync_or_and_fetch(&_M_i, __i); }
 
       __integral_type
-      operator^=(__integral_type __i) volatile
+      operator^=(__integral_type __i)
       { return __sync_xor_and_fetch(&_M_i, __i); }
 
       bool
-      is_lock_free() const volatile
+      is_lock_free() const
       { return true; }
 
       void
-      store(__integral_type __i,
-	    memory_order __m = memory_order_seq_cst) volatile
+      store(__integral_type __i, memory_order __m = memory_order_seq_cst)
       {
 	__glibcxx_assert(__m != memory_order_acquire);
 	__glibcxx_assert(__m != memory_order_acq_rel);
@@ -305,7 +304,7 @@ namespace __atomic2
       }
 
       __integral_type
-      load(memory_order __m = memory_order_seq_cst) const volatile
+      load(memory_order __m = memory_order_seq_cst) const 
       {
 	__glibcxx_assert(__m != memory_order_release);
 	__glibcxx_assert(__m != memory_order_acq_rel);
@@ -317,8 +316,7 @@ namespace __atomic2
       }
 
       __integral_type
-      exchange(__integral_type __i,
-	       memory_order __m = memory_order_seq_cst) volatile
+      exchange(__integral_type __i, memory_order __m = memory_order_seq_cst)
       {
 	// XXX built-in assumes memory_order_acquire.
 	return __sync_lock_test_and_set(&_M_i, __i);
@@ -326,12 +324,12 @@ namespace __atomic2
 
       bool
       compare_exchange_weak(__integral_type& __i1, __integral_type __i2,
-			    memory_order __m1, memory_order __m2) volatile
+			    memory_order __m1, memory_order __m2)
       { return compare_exchange_strong(__i1, __i2, __m1, __m2); }
 
       bool
       compare_exchange_weak(__integral_type& __i1, __integral_type __i2,
-			    memory_order __m = memory_order_seq_cst) volatile
+			    memory_order __m = memory_order_seq_cst)
       {
 	return compare_exchange_weak(__i1, __i2, __m,
 				     __calculate_memory_order(__m));
@@ -339,7 +337,7 @@ namespace __atomic2
 
       bool
       compare_exchange_strong(__integral_type& __i1, __integral_type __i2,
-			      memory_order __m1, memory_order __m2) volatile
+			      memory_order __m1, memory_order __m2) 
       {
 	__glibcxx_assert(__m2 != memory_order_release);
 	__glibcxx_assert(__m2 != memory_order_acq_rel);
@@ -355,7 +353,7 @@ namespace __atomic2
 
       bool
       compare_exchange_strong(__integral_type& __i1, __integral_type __i2,
-			      memory_order __m = memory_order_seq_cst) volatile
+			      memory_order __m = memory_order_seq_cst)
       {
 	return compare_exchange_strong(__i1, __i2, __m,
 				       __calculate_memory_order(__m));
@@ -363,27 +361,27 @@ namespace __atomic2
 
       __integral_type
       fetch_add(__integral_type __i,
-		memory_order __m = memory_order_seq_cst) volatile
+		memory_order __m = memory_order_seq_cst)
       { return __sync_fetch_and_add(&_M_i, __i); }
 
       __integral_type
       fetch_sub(__integral_type __i,
-		memory_order __m = memory_order_seq_cst) volatile
+		memory_order __m = memory_order_seq_cst) 
       { return __sync_fetch_and_sub(&_M_i, __i); }
 
       __integral_type
       fetch_and(__integral_type __i,
-		memory_order __m = memory_order_seq_cst) volatile
+		memory_order __m = memory_order_seq_cst) 
       { return __sync_fetch_and_and(&_M_i, __i); }
 
       __integral_type
       fetch_or(__integral_type __i,
-	       memory_order __m = memory_order_seq_cst) volatile
+	       memory_order __m = memory_order_seq_cst) 
       { return __sync_fetch_and_or(&_M_i, __i); }
 
       __integral_type
       fetch_xor(__integral_type __i,
-		memory_order __m = memory_order_seq_cst) volatile
+		memory_order __m = memory_order_seq_cst)
       { return __sync_fetch_and_xor(&_M_i, __i); }
     };
 
@@ -399,52 +397,52 @@ namespace __atomic2
     atomic_bool() = default;
     ~atomic_bool() = default;
     atomic_bool(const atomic_bool&) = delete;
-    atomic_bool& operator=(const atomic_bool&) = delete;
+    atomic_bool& operator=(const atomic_bool&) volatile = delete;
 
     atomic_bool(bool __i) : _M_base(__i) { }
 
     bool
-    operator=(bool __i) // XXX volatile
+    operator=(bool __i)
     { return _M_base.operator=(__i); }
 
-    operator bool() const volatile
+    operator bool() const 
     { return _M_base.load(); }
 
     bool
-    is_lock_free() const volatile
+    is_lock_free() const
     { return _M_base.is_lock_free(); }
 
     void
-    store(bool __i, memory_order __m = memory_order_seq_cst) volatile
+    store(bool __i, memory_order __m = memory_order_seq_cst)
     { _M_base.store(__i, __m); }
 
     bool
-    load(memory_order __m = memory_order_seq_cst) const volatile
+    load(memory_order __m = memory_order_seq_cst) const
     { return _M_base.load(__m); }
 
     bool
-    exchange(bool __i, memory_order __m = memory_order_seq_cst) volatile
+    exchange(bool __i, memory_order __m = memory_order_seq_cst)
     { return _M_base.exchange(__i, __m); }
 
     bool
     compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
-			  memory_order __m2) volatile
+			  memory_order __m2)
     { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
 
     bool
     compare_exchange_weak(bool& __i1, bool __i2,
-			  memory_order __m = memory_order_seq_cst) volatile
+			  memory_order __m = memory_order_seq_cst)
     { return _M_base.compare_exchange_weak(__i1, __i2, __m); }
 
     bool
     compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
-			    memory_order __m2) volatile
+			    memory_order __m2)
     { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
 
 
     bool
     compare_exchange_strong(bool& __i1, bool __i2,
-			    memory_order __m = memory_order_seq_cst) volatile
+			    memory_order __m = memory_order_seq_cst)
     { return _M_base.compare_exchange_strong(__i1, __i2, __m); }
   };
 } // namespace __atomic2
diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h
new file mode 100644
index 0000000000000000000000000000000000000000..454699f8175b142fa17e01df20edda324ab618a2
--- /dev/null
+++ b/libstdc++-v3/include/bits/atomic_base.h
@@ -0,0 +1,224 @@
+// -*- C++ -*- compatibility header.
+
+// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/atomic_base.h
+ *  This is a Standard C++ Library header.
+ */
+
+#include <bits/c++config.h>
+#include <stddef.h>
+#include <stdbool.h> // XXX need to define bool w/o stdbool.h in tr1/cstdbool
+
+#ifndef _GLIBCXX_ATOMIC_BASE_H
+#define _GLIBCXX_ATOMIC_BASE_H 1
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+_GLIBCXX_BEGIN_EXTERN_C
+
+  /**
+   * @defgroup atomics Atomics
+   *
+   * Components for performing atomic operations.
+   * @{
+   */
+
+  /// Enumeration for memory_order
+  typedef enum memory_order
+    {
+      memory_order_relaxed,
+      memory_order_consume,
+      memory_order_acquire,
+      memory_order_release,
+      memory_order_acq_rel,
+      memory_order_seq_cst
+    } memory_order;
+
+  // Base for atomic_flag.
+  typedef struct __atomic_flag_base
+  {
+    bool _M_i;
+  } __atomic_flag_base;
+
+#define ATOMIC_FLAG_INIT { false }
+
+  /// 29.2 Lock-free Property
+#if defined(_GLIBCXX_ATOMIC_BUILTINS_1) && defined(_GLIBCXX_ATOMIC_BUILTINS_2) \
+  && defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_ATOMIC_BUILTINS_8)
+# define _GLIBCXX_ATOMIC_PROPERTY 2
+# define _GLIBCXX_ATOMIC_NAMESPACE __atomic2
+#elif defined(_GLIBCXX_ATOMIC_BUILTINS_1)
+# define _GLIBCXX_ATOMIC_PROPERTY 1
+# define _GLIBCXX_ATOMIC_NAMESPACE __atomic1
+#else
+# define _GLIBCXX_ATOMIC_PROPERTY 0
+# define _GLIBCXX_ATOMIC_NAMESPACE __atomic0
+#endif
+
+#define ATOMIC_INTEGRAL_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
+#define ATOMIC_ADDRESS_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
+
+  // Switch atomic integral base types based on C or C++.  In
+  // addition, for "C" only provide type-generic macros for atomic
+  // operations. (As C++ accomplishes the same thing with sets of
+  // overloaded functions.
+#ifdef __cplusplus
+  inline namespace _GLIBCXX_ATOMIC_NAMESPACE { }
+# include <bits/atomicfwd_cxx.h>
+#else
+# include <bits/atomicfwd_c.h>
+#endif
+
+  // Typedefs for other atomic integral types.
+  typedef atomic_schar 		atomic_int_least8_t;
+  typedef atomic_uchar 		atomic_uint_least8_t;
+  typedef atomic_short 		atomic_int_least16_t;
+  typedef atomic_ushort 	atomic_uint_least16_t;
+  typedef atomic_int 		atomic_int_least32_t;
+  typedef atomic_uint 		atomic_uint_least32_t;
+  typedef atomic_llong 		atomic_int_least64_t;
+  typedef atomic_ullong 	atomic_uint_least64_t;
+
+  typedef atomic_schar 		atomic_int_fast8_t;
+  typedef atomic_uchar 		atomic_uint_fast8_t;
+  typedef atomic_short 		atomic_int_fast16_t;
+  typedef atomic_ushort 	atomic_uint_fast16_t;
+  typedef atomic_int 		atomic_int_fast32_t;
+  typedef atomic_uint 		atomic_uint_fast32_t;
+  typedef atomic_llong 		atomic_int_fast64_t;
+  typedef atomic_ullong 	atomic_uint_fast64_t;
+
+  typedef atomic_long 		atomic_intptr_t;
+  typedef atomic_ulong 		atomic_uintptr_t;
+
+  typedef atomic_long 		atomic_ssize_t;
+  typedef atomic_ulong 		atomic_size_t;
+
+  typedef atomic_llong 		atomic_intmax_t;
+  typedef atomic_ullong 	atomic_uintmax_t;
+
+  typedef atomic_long 		atomic_ptrdiff_t;
+
+  // Accessor functions for base atomic_flag type.
+  bool
+  atomic_flag_test_and_set_explicit(__atomic_flag_base*, memory_order)
+  _GLIBCXX_NOTHROW;
+
+  inline bool
+  atomic_flag_test_and_set(__atomic_flag_base* __a)
+  { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
+
+  void
+  atomic_flag_clear_explicit(__atomic_flag_base*, memory_order)
+  _GLIBCXX_NOTHROW;
+
+  inline void
+  atomic_flag_clear(__atomic_flag_base* __a)
+  { atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
+
+  void
+  __atomic_flag_wait_explicit(__atomic_flag_base*, memory_order)
+  _GLIBCXX_NOTHROW;
+
+  _GLIBCXX_CONST __atomic_flag_base*
+  __atomic_flag_for_address(const void* __z) _GLIBCXX_NOTHROW;
+
+  // Implementation specific defines.
+#define _ATOMIC_LOAD_(__a, __x)						\
+  ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;			\
+    atomic_flag* __g = __atomic_flag_for_address(__p); 			\
+    __atomic_flag_wait_explicit(__g, __x);				\
+    __typeof__ _ATOMIC_MEMBER_ __r = *__p;				\
+    atomic_flag_clear_explicit(__g, __x);		       		\
+    __r; })
+
+#define _ATOMIC_STORE_(__a, __m, __x)					\
+  ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;			\
+    __typeof__(__m) __v = (__m);			       		\
+    atomic_flag* __g = __atomic_flag_for_address(__p); 			\
+    __atomic_flag_wait_explicit(__g, __x);				\
+    *__p = __v;								\
+    atomic_flag_clear_explicit(__g, __x);		       		\
+    __v; })
+
+#define _ATOMIC_MODIFY_(__a, __o, __m, __x)				\
+  ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;			\
+    __typeof__(__m) __v = (__m);			       		\
+    atomic_flag* __g = __atomic_flag_for_address(__p); 			\
+    __atomic_flag_wait_explicit(__g, __x);				\
+    __typeof__ _ATOMIC_MEMBER_ __r = *__p;				\
+    *__p __o __v;					       		\
+    atomic_flag_clear_explicit(__g, __x);		       		\
+    __r; })
+
+#define _ATOMIC_CMPEXCHNG_(__a, __e, __m, __x)				\
+  ({__typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;			\
+    __typeof__(__e) __q = (__e);			       		\
+    __typeof__(__m) __v = (__m);			       		\
+    bool __r;						       		\
+    atomic_flag* __g = __atomic_flag_for_address(__p); 			\
+    __atomic_flag_wait_explicit(__g, __x);				\
+    __typeof__ _ATOMIC_MEMBER_ __t__ = *__p;		       		\
+    if (__t__ == *__q) { *__p = __v; __r = true; }			\
+    else { *__q = __t__; __r = false; }		       			\
+    atomic_flag_clear_explicit(__g, __x);		       		\
+    __r; })
+
+  // @} group atomics
+
+_GLIBCXX_END_EXTERN_C
+_GLIBCXX_END_NAMESPACE
+
+// Inject into global namespace.
+#ifdef __cplusplus
+
+#include <atomic>
+
+using std::memory_order;
+using std::memory_order_relaxed;
+using std::memory_order_consume;
+using std::memory_order_acquire;
+using std::memory_order_release;
+using std::memory_order_acq_rel;
+using std::memory_order_seq_cst;
+using std::atomic_flag;
+using std::atomic_bool;
+using std::atomic_char;
+using std::atomic_schar;
+using std::atomic_uchar;
+using std::atomic_short;
+using std::atomic_ushort;
+using std::atomic_int;
+using std::atomic_uint;
+using std::atomic_long;
+using std::atomic_ulong;
+using std::atomic_llong;
+using std::atomic_ullong;
+using std::atomic_wchar_t;
+using std::atomic_char16_t;
+using std::atomic_char32_t;
+using std::atomic_address;
+using std::atomic;
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_compatibility/stdatomic.h b/libstdc++-v3/include/c_compatibility/stdatomic.h
index eaa45cddac143731f85677ed163113be86c399cd..1b24b494f1136970a88c034eddfe07694cf93664 100644
--- a/libstdc++-v3/include/c_compatibility/stdatomic.h
+++ b/libstdc++-v3/include/c_compatibility/stdatomic.h
@@ -26,196 +26,12 @@
  *  This is a Standard C++ Library header.
  */
 
-#include <bits/c++config.h>
-#include <stddef.h>
-#include <stdbool.h> // XXX need to define bool w/o stdbool.h in tr1/cstdbool
+#include <bits/atomic_base.h>
 
 #ifndef _GLIBCXX_STDATOMIC_H
 #define _GLIBCXX_STDATOMIC_H 1
 
-_GLIBCXX_BEGIN_NAMESPACE(std)
-_GLIBCXX_BEGIN_EXTERN_C
-
-  /**
-   * @defgroup atomics Atomics
-   *
-   * Components for performing atomic operations.
-   * @{
-   */
-
-  /// Enumeration for memory_order
-  typedef enum memory_order 
-    {
-      memory_order_relaxed, 
-      memory_order_consume, 
-      memory_order_acquire, 
-      memory_order_release,
-      memory_order_acq_rel, 
-      memory_order_seq_cst
-    } memory_order;
-
-  // Base for atomic_flag.
-  typedef struct __atomic_flag_base
-  {
-    bool _M_i;
-  } __atomic_flag_base;
-
-#define ATOMIC_FLAG_INIT { false } 
-
-  /// 29.2 Lock-free Property
-#if defined(_GLIBCXX_ATOMIC_BUILTINS_1) && defined(_GLIBCXX_ATOMIC_BUILTINS_2) \
-  && defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_ATOMIC_BUILTINS_8)
-# define _GLIBCXX_ATOMIC_PROPERTY 2
-# define _GLIBCXX_ATOMIC_NAMESPACE __atomic2
-#elif defined(_GLIBCXX_ATOMIC_BUILTINS_1)
-# define _GLIBCXX_ATOMIC_PROPERTY 1
-# define _GLIBCXX_ATOMIC_NAMESPACE __atomic1
-#else
-# define _GLIBCXX_ATOMIC_PROPERTY 0
-# define _GLIBCXX_ATOMIC_NAMESPACE __atomic0
-#endif
-
-#define ATOMIC_INTEGRAL_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-#define ATOMIC_ADDRESS_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
-
-  // Switch atomic integral base types based on C or C++.  In
-  // addition, for "C" only provide type-generic macros for atomic
-  // operations. (As C++ accomplishes the same thing with sets of
-  // overloaded functions.
-#ifdef __cplusplus
-  inline namespace _GLIBCXX_ATOMIC_NAMESPACE { }
-# include <bits/atomicfwd_cxx.h>
-#else
-# include <bits/atomicfwd_c.h>
-#endif
-  
-  // Typedefs for other atomic integral types.
-  typedef atomic_schar 		atomic_int_least8_t;
-  typedef atomic_uchar 		atomic_uint_least8_t;
-  typedef atomic_short 		atomic_int_least16_t;
-  typedef atomic_ushort 	atomic_uint_least16_t;
-  typedef atomic_int 		atomic_int_least32_t;
-  typedef atomic_uint 		atomic_uint_least32_t;
-  typedef atomic_llong 		atomic_int_least64_t;
-  typedef atomic_ullong 	atomic_uint_least64_t;
-
-  typedef atomic_schar 		atomic_int_fast8_t;
-  typedef atomic_uchar 		atomic_uint_fast8_t;
-  typedef atomic_short 		atomic_int_fast16_t;
-  typedef atomic_ushort 	atomic_uint_fast16_t;
-  typedef atomic_int 		atomic_int_fast32_t;
-  typedef atomic_uint 		atomic_uint_fast32_t;
-  typedef atomic_llong 		atomic_int_fast64_t;
-  typedef atomic_ullong 	atomic_uint_fast64_t;
-
-  typedef atomic_long 		atomic_intptr_t;
-  typedef atomic_ulong 		atomic_uintptr_t;
-
-  typedef atomic_long 		atomic_ssize_t;
-  typedef atomic_ulong 		atomic_size_t;
-
-  typedef atomic_llong 		atomic_intmax_t;
-  typedef atomic_ullong 	atomic_uintmax_t;
-
-  typedef atomic_long 		atomic_ptrdiff_t;
-
-  // Accessor functions for base atomic_flag type.
-  bool 
-  atomic_flag_test_and_set_explicit(volatile __atomic_flag_base*, memory_order) _GLIBCXX_NOTHROW;
-
-  inline bool 
-  atomic_flag_test_and_set(volatile __atomic_flag_base* __a)
-  { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
-  
-  void 
-  atomic_flag_clear_explicit(volatile __atomic_flag_base*, memory_order) _GLIBCXX_NOTHROW;
-
-  inline void 
-  atomic_flag_clear(volatile __atomic_flag_base* __a)
-  { atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
-
-  void 
-  __atomic_flag_wait_explicit(volatile __atomic_flag_base*, memory_order) _GLIBCXX_NOTHROW;
-  
-  _GLIBCXX_CONST volatile __atomic_flag_base* 
-  __atomic_flag_for_address(const volatile void* __z) _GLIBCXX_NOTHROW;
-
-  // Implementation specific defines.
-#define _ATOMIC_LOAD_(__a, __x)						\
-  ({ volatile __typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	\
-     volatile atomic_flag* __g = __atomic_flag_for_address(__p); 	\
-    __atomic_flag_wait_explicit(__g, __x);				\
-    __typeof__ _ATOMIC_MEMBER_ __r = *__p;				\
-    atomic_flag_clear_explicit(__g, __x);		       		\
-    __r; })
-
-#define _ATOMIC_STORE_(__a, __m, __x)					\
-  ({ volatile __typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	\
-    __typeof__(__m) __v = (__m);			       		\
-    volatile atomic_flag* __g = __atomic_flag_for_address(__p); 	\
-    __atomic_flag_wait_explicit(__g, __x);				\
-    *__p = __v;								\
-    atomic_flag_clear_explicit(__g, __x);		       		\
-    __v; })
-
-#define _ATOMIC_MODIFY_(__a, __o, __m, __x)				\
-  ({ volatile __typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	\
-    __typeof__(__m) __v = (__m);			       		\
-    volatile atomic_flag* __g = __atomic_flag_for_address(__p); 	\
-    __atomic_flag_wait_explicit(__g, __x);				\
-    __typeof__ _ATOMIC_MEMBER_ __r = *__p;				\
-    *__p __o __v;					       		\
-    atomic_flag_clear_explicit(__g, __x);		       		\
-    __r; })
-
-#define _ATOMIC_CMPEXCHNG_(__a, __e, __m, __x)				\
-  ({ volatile __typeof__ _ATOMIC_MEMBER_* __p = &_ATOMIC_MEMBER_;	\
-    __typeof__(__e) __q = (__e);			       		\
-    __typeof__(__m) __v = (__m);			       		\
-    bool __r;						       		\
-    volatile atomic_flag* __g = __atomic_flag_for_address(__p); 	\
-    __atomic_flag_wait_explicit(__g, __x);				\
-    __typeof__ _ATOMIC_MEMBER_ __t__ = *__p;		       		\
-    if (__t__ == *__q) { *__p = __v; __r = true; }			\
-    else { *__q = __t__; __r = false; }		       			\
-    atomic_flag_clear_explicit(__g, __x);		       		\
-    __r; })
-
-  // @} group atomics
-
-_GLIBCXX_END_EXTERN_C
-_GLIBCXX_END_NAMESPACE
-
-// Inject into global namespace.
-#ifdef __cplusplus
-
-#include <cstdatomic>
-
-using std::memory_order;
-using std::memory_order_relaxed;
-using std::memory_order_consume;
-using std::memory_order_acquire;
-using std::memory_order_release;
-using std::memory_order_acq_rel;
-using std::memory_order_seq_cst;
-using std::atomic_flag;
-using std::atomic_bool;
-using std::atomic_char;
-using std::atomic_schar;
-using std::atomic_uchar;
-using std::atomic_short;
-using std::atomic_ushort;
-using std::atomic_int;
-using std::atomic_uint;
-using std::atomic_long;
-using std::atomic_ulong;
-using std::atomic_llong;
-using std::atomic_ullong;
-using std::atomic_wchar_t;
-using std::atomic_char16_t;
-using std::atomic_char32_t;
-using std::atomic_address;
-using std::atomic;
+#ifdef _GLIBCXX_NAMESPACE_C
 #endif
 
 #endif
diff --git a/libstdc++-v3/include/precompiled/stdc++.h b/libstdc++-v3/include/precompiled/stdc++.h
index 99def36314207e7264f5e81fc20535e8a84ffb47..c19c9384be0f9a17aa5d44ab009c27bd4499ca88 100644
--- a/libstdc++-v3/include/precompiled/stdc++.h
+++ b/libstdc++-v3/include/precompiled/stdc++.h
@@ -53,7 +53,6 @@
 #include <ccomplex>
 #include <cfenv>
 #include <cinttypes>
-#include <cstdatomic>
 #include <cstdbool>
 #include <cstdint>
 #include <ctgmath>
@@ -97,6 +96,7 @@
 
 #ifdef __GXX_EXPERIMENTAL_CXX0X__
 #include <array>
+#include <atomic>
 #include <chrono>
 #include <condition_variable>
 #include <forward_list>
diff --git a/libstdc++-v3/include/c_global/cstdatomic b/libstdc++-v3/include/std/atomic
similarity index 63%
rename from libstdc++-v3/include/c_global/cstdatomic
rename to libstdc++-v3/include/std/atomic
index c2aea8f02c23e9bd71bd884835698c4a6e122e72..de75b433ee971541d114dac936d7874bdb436b68 100644
--- a/libstdc++-v3/include/c_global/cstdatomic
+++ b/libstdc++-v3/include/std/atomic
@@ -23,21 +23,15 @@
 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 // <http://www.gnu.org/licenses/>.
 
-/** @file cstdatomic
- *  This is a Standard C++ Library file.  You should @c \#include this file
- *  in your programs, rather than any of the "*.h" implementation files.
- *
- *  This is the C++ version of the Standard C Library header @c stdatomic.h,
- *  and its contents are (mostly) the same as that header, but are all
- *  contained in the namespace @c std (except for names which are defined
- *  as macros in C).
+/** @file atomic
+ *  This is a Standard C++ Library header.
  */
 
 // Based on "C++ Atomic Types and Operations" by Hans Boehm and Lawrence Crowl.
 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
 
-#ifndef _GLIBCXX_STDATOMIC
-#define _GLIBCXX_STDATOMIC 1
+#ifndef _GLIBCXX_ATOMIC
+#define _GLIBCXX_ATOMIC 1
 
 #pragma GCC system_header
 
@@ -45,7 +39,7 @@
 # include <c++0x_warning.h>
 #endif
 
-#include <stdatomic.h>
+#include <bits/atomic_base.h>
 #include <cstddef>
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
@@ -57,7 +51,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 
   /// kill_dependency
   template<typename _Tp>
-    inline _Tp 
+    inline _Tp
     kill_dependency(_Tp __y)
     {
       _Tp ret(__y);
@@ -76,10 +70,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 
   //
   // Three nested namespaces for atomic implementation details.
-  // 
+  //
   // The nested namespace inlined into std:: is determined by the value
   // of the _GLIBCXX_ATOMIC_PROPERTY macro and the resulting
-  // ATOMIC_*_LOCK_FREE macros. See file stdatomic.h.
+  // ATOMIC_*_LOCK_FREE macros. See file atomic_base.h.
   //
   // 0 == __atomic0 == Never lock-free
   // 1 == __atomic1 == Best available, sometimes lock-free
@@ -99,117 +93,115 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(_Tp __i) : _M_i(__i) { }
 
-      operator _Tp() const volatile;
+      operator _Tp() const;
 
-      _Tp 
-      operator=(_Tp __i) volatile { store(__i); return __i; }
+      _Tp
+      operator=(_Tp __i) { store(__i); return __i; }
 
-      bool 
+      bool
       is_lock_free() const volatile;
 
-      void 
+      void
       store(_Tp, memory_order = memory_order_seq_cst) volatile;
 
-      _Tp 
+      _Tp
       load(memory_order = memory_order_seq_cst) const volatile;
 
-      _Tp 
+      _Tp
       exchange(_Tp __i, memory_order = memory_order_seq_cst) volatile;
 
-      bool 
+      bool
       compare_exchange_weak(_Tp&, _Tp, memory_order, memory_order) volatile;
 
-      bool 
+      bool
       compare_exchange_strong(_Tp&, _Tp, memory_order, memory_order) volatile;
 
-      bool 
-      compare_exchange_weak(_Tp&, _Tp, 
+      bool
+      compare_exchange_weak(_Tp&, _Tp,
 			    memory_order = memory_order_seq_cst) volatile;
 
-      bool 
-      compare_exchange_strong(_Tp&, _Tp, 
+      bool
+      compare_exchange_strong(_Tp&, _Tp,
 			      memory_order = memory_order_seq_cst) volatile;
     };
 
 
   /// Partial specialization for pointer types.
-  template<typename _Tp> 
+  template<typename _Tp>
     struct atomic<_Tp*> : atomic_address
     {
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(_Tp* __v) : atomic_address(__v) { }
 
-      void 
-      store(_Tp*, memory_order = memory_order_seq_cst) volatile;
+      void
+      store(_Tp*, memory_order = memory_order_seq_cst);
 
-      _Tp* 
-      load(memory_order = memory_order_seq_cst) const volatile;
+      _Tp*
+      load(memory_order = memory_order_seq_cst) const;
 
-      _Tp* 
-      exchange(_Tp*, memory_order = memory_order_seq_cst) volatile;
+      _Tp*
+      exchange(_Tp*, memory_order = memory_order_seq_cst);
 
-      bool 
-      compare_exchange_weak(_Tp*&, _Tp*, memory_order, memory_order) volatile;
+      bool
+      compare_exchange_weak(_Tp*&, _Tp*, memory_order, memory_order);
 
-      bool 
-      compare_exchange_strong(_Tp*&, _Tp*, memory_order, memory_order) volatile;
+      bool
+      compare_exchange_strong(_Tp*&, _Tp*, memory_order, memory_order);
 
-      bool 
-      compare_exchange_weak(_Tp*&, _Tp*, 
-			    memory_order = memory_order_seq_cst) volatile;
+      bool
+      compare_exchange_weak(_Tp*&, _Tp*, memory_order = memory_order_seq_cst);
 
-      bool 
-      compare_exchange_strong(_Tp*&, _Tp*, 
-			      memory_order = memory_order_seq_cst) volatile;
+      bool
+      compare_exchange_strong(_Tp*&, _Tp*, memory_order = memory_order_seq_cst);
 
-      _Tp* 
-      fetch_add(ptrdiff_t, memory_order = memory_order_seq_cst) volatile;
+      _Tp*
+      fetch_add(ptrdiff_t, memory_order = memory_order_seq_cst);
 
-      _Tp* 
-      fetch_sub(ptrdiff_t, memory_order = memory_order_seq_cst) volatile;
+      _Tp*
+      fetch_sub(ptrdiff_t, memory_order = memory_order_seq_cst);
 
-      operator _Tp*() const volatile
+      operator _Tp*() const
       { return load(); }
 
-      _Tp* 
-      operator=(_Tp* __v) volatile 
-      { 
-	store(__v); 
-	return __v; 
+      _Tp*
+      operator=(_Tp* __v)
+      {
+	store(__v);
+	return __v;
       }
 
-      _Tp* 
-      operator++(int) volatile { return fetch_add(1); }
+      _Tp*
+      operator++(int) { return fetch_add(1); }
 
-      _Tp* 
-      operator--(int) volatile { return fetch_sub(1); }
+      _Tp*
+      operator--(int) { return fetch_sub(1); }
 
-      _Tp* 
-      operator++() volatile { return fetch_add(1) + 1; }
+      _Tp*
+      operator++() { return fetch_add(1) + 1; }
 
-      _Tp* 
-      operator--() volatile { return fetch_sub(1) - 1; }
+      _Tp*
+      operator--() { return fetch_sub(1) - 1; }
 
-      _Tp* 
-      operator+=(ptrdiff_t __d) volatile 
+      _Tp*
+      operator+=(ptrdiff_t __d)
       { return fetch_add(__d) + __d; }
 
-      _Tp* 
-      operator-=(ptrdiff_t __d) volatile 
+      _Tp*
+      operator-=(ptrdiff_t __d)
       { return fetch_sub(__d) - __d; }
     };
 
 
   /// Explicit specialization for void*
-  template<> 
+  template<>
     struct atomic<void*> : public atomic_address
     {
       typedef void* 			__integral_type;
@@ -218,7 +210,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -227,7 +219,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for bool.
-  template<> 
+  template<>
     struct atomic<bool> : public atomic_bool
     {
       typedef bool 			__integral_type;
@@ -236,7 +228,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -245,7 +237,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for char.
-  template<> 
+  template<>
     struct atomic<char> : public atomic_char
     {
       typedef char 			__integral_type;
@@ -254,7 +246,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -263,16 +255,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for signed char.
-  template<> 
+  template<>
     struct atomic<signed char> : public atomic_schar
-    { 
+    {
       typedef signed char 		__integral_type;
       typedef atomic_schar 		__base_type;
 
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -281,7 +273,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for unsigned char.
-  template<> 
+  template<>
     struct atomic<unsigned char> : public atomic_uchar
     {
       typedef unsigned char 		__integral_type;
@@ -290,7 +282,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -299,7 +291,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for short.
-  template<> 
+  template<>
     struct atomic<short> : public atomic_short
     {
       typedef short 			__integral_type;
@@ -308,7 +300,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -317,7 +309,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for unsigned short.
-  template<> 
+  template<>
     struct atomic<unsigned short> : public atomic_ushort
     {
       typedef unsigned short 	      	__integral_type;
@@ -326,7 +318,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -335,7 +327,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for int.
-  template<> 
+  template<>
     struct atomic<int> : atomic_int
     {
       typedef int 			__integral_type;
@@ -344,7 +336,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -353,7 +345,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for unsigned int.
-  template<> 
+  template<>
     struct atomic<unsigned int> : public atomic_uint
     {
       typedef unsigned int		__integral_type;
@@ -362,7 +354,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -371,7 +363,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for long.
-  template<> 
+  template<>
     struct atomic<long> : public atomic_long
     {
       typedef long 			__integral_type;
@@ -380,7 +372,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -389,7 +381,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for unsigned long.
-  template<> 
+  template<>
     struct atomic<unsigned long> : public atomic_ulong
     {
       typedef unsigned long 		__integral_type;
@@ -398,7 +390,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -407,7 +399,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for long long.
-  template<> 
+  template<>
     struct atomic<long long> : public atomic_llong
     {
       typedef long long 		__integral_type;
@@ -416,7 +408,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -425,7 +417,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for unsigned long long.
-  template<> 
+  template<>
     struct atomic<unsigned long long> : public atomic_ullong
     {
       typedef unsigned long long       	__integral_type;
@@ -434,7 +426,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -443,7 +435,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for wchar_t.
-  template<> 
+  template<>
     struct atomic<wchar_t> : public atomic_wchar_t
     {
       typedef wchar_t 			__integral_type;
@@ -452,7 +444,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -461,7 +453,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for char16_t.
-  template<> 
+  template<>
     struct atomic<char16_t> : public atomic_char16_t
     {
       typedef char16_t 			__integral_type;
@@ -470,7 +462,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -479,7 +471,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     };
 
   /// Explicit specialization for char32_t.
-  template<> 
+  template<>
     struct atomic<char32_t> : public atomic_char32_t
     {
       typedef char32_t 			__integral_type;
@@ -488,7 +480,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       atomic() = default;
       ~atomic() = default;
       atomic(const atomic&) = delete;
-      atomic& operator=(const atomic&) = delete;
+      atomic& operator=(const atomic&) volatile = delete;
 
       atomic(__integral_type __i) : __base_type(__i) { }
 
@@ -498,212 +490,207 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 
 
   template<typename _Tp>
-    _Tp* 
-    atomic<_Tp*>::load(memory_order __m) const volatile
+    _Tp*
+    atomic<_Tp*>::load(memory_order __m) const
     { return static_cast<_Tp*>(atomic_address::load(__m)); }
 
   template<typename _Tp>
-    _Tp* 
-    atomic<_Tp*>::exchange(_Tp* __v, memory_order __m) volatile
+    _Tp*
+    atomic<_Tp*>::exchange(_Tp* __v, memory_order __m)
     { return static_cast<_Tp*>(atomic_address::exchange(__v, __m)); }
 
   template<typename _Tp>
-    bool 
-    atomic<_Tp*>::compare_exchange_weak(_Tp*& __r, _Tp* __v, memory_order __m1, 
-					memory_order __m2) volatile
-    { 
+    bool
+    atomic<_Tp*>::compare_exchange_weak(_Tp*& __r, _Tp* __v, memory_order __m1,
+					memory_order __m2)
+    {
       void** __vr = reinterpret_cast<void**>(&__r);
       void* __vv = static_cast<void*>(__v);
-      return atomic_address::compare_exchange_weak(*__vr, __vv, __m1, __m2); 
+      return atomic_address::compare_exchange_weak(*__vr, __vv, __m1, __m2);
     }
 
   template<typename _Tp>
-    bool 
-    atomic<_Tp*>::compare_exchange_strong(_Tp*& __r, _Tp* __v, 
+    bool
+    atomic<_Tp*>::compare_exchange_strong(_Tp*& __r, _Tp* __v,
 					  memory_order __m1,
-					  memory_order __m2) volatile
-    { 
+					  memory_order __m2)
+    {
       void** __vr = reinterpret_cast<void**>(&__r);
       void* __vv = static_cast<void*>(__v);
-      return atomic_address::compare_exchange_strong(*__vr, __vv, __m1, __m2); 
+      return atomic_address::compare_exchange_strong(*__vr, __vv, __m1, __m2);
     }
 
   template<typename _Tp>
-    bool 
+    bool
     atomic<_Tp*>::compare_exchange_weak(_Tp*& __r, _Tp* __v,
-					memory_order __m) volatile
-    { 
-      return compare_exchange_weak(__r, __v, __m, 
+					memory_order __m)
+    {
+      return compare_exchange_weak(__r, __v, __m,
 				   __calculate_memory_order(__m));
     }
 
   template<typename _Tp>
-    bool 
+    bool
     atomic<_Tp*>::compare_exchange_strong(_Tp*& __r, _Tp* __v,
-					memory_order __m) volatile
-    { 
+					memory_order __m)
+    {
       return compare_exchange_strong(__r, __v, __m,
 				     __calculate_memory_order(__m));
     }
 
   template<typename _Tp>
-    _Tp* 
-    atomic<_Tp*>::fetch_add(ptrdiff_t __d, memory_order __m) volatile
-    { 
+    _Tp*
+    atomic<_Tp*>::fetch_add(ptrdiff_t __d, memory_order __m)
+    {
       void* __p = atomic_fetch_add_explicit(this, sizeof(_Tp) * __d, __m);
       return static_cast<_Tp*>(__p);
     }
 
   template<typename _Tp>
-    _Tp* 
-    atomic<_Tp*>::fetch_sub(ptrdiff_t __d, memory_order __m) volatile
-    { 
-      void* __p = atomic_fetch_sub_explicit(this, sizeof(_Tp) * __d, __m); 
-      return static_cast<_Tp*>(__p);    
+    _Tp*
+    atomic<_Tp*>::fetch_sub(ptrdiff_t __d, memory_order __m)
+    {
+      void* __p = atomic_fetch_sub_explicit(this, sizeof(_Tp) * __d, __m);
+      return static_cast<_Tp*>(__p);
     }
 
   // Convenience function definitions, atomic_flag.
-  inline bool 
-  atomic_flag_test_and_set_explicit(volatile atomic_flag* __a, memory_order __m)
+  inline bool
+  atomic_flag_test_and_set_explicit(atomic_flag* __a, memory_order __m)
   { return __a->test_and_set(__m); }
 
-  inline void 
-  atomic_flag_clear_explicit(volatile atomic_flag* __a, memory_order __m)
+  inline void
+  atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m)
   { return __a->clear(__m); }
 
 
   // Convenience function definitions, atomic_address.
-  inline bool 
-  atomic_is_lock_free(const volatile atomic_address* __a)
+  inline bool
+  atomic_is_lock_free(const atomic_address* __a)
   { return __a->is_lock_free(); }
 
-  inline void 
-  atomic_store(volatile atomic_address* __a, void* __v)
+  inline void
+  atomic_store(atomic_address* __a, void* __v)
   { __a->store(__v); }
 
-  inline void 
-  atomic_store_explicit(volatile atomic_address* __a, void* __v, 
-			memory_order __m)
+  inline void
+  atomic_store_explicit(atomic_address* __a, void* __v, memory_order __m)
   { __a->store(__v, __m); }
 
-  inline void* 
-  atomic_load(const volatile atomic_address* __a)
+  inline void*
+  atomic_load(const atomic_address* __a)
   { return __a->load(); }
 
-  inline void* 
-  atomic_load_explicit(const volatile atomic_address* __a, memory_order __m)
+  inline void*
+  atomic_load_explicit(const atomic_address* __a, memory_order __m)
   { return __a->load(__m); }
 
-  inline void* 
-  atomic_exchange(volatile atomic_address* __a, void* __v)
+  inline void*
+  atomic_exchange(atomic_address* __a, void* __v)
   { return __a->exchange(__v); }
 
-  inline void* 
-  atomic_exchange_explicit(volatile atomic_address* __a, void* __v, 
-			   memory_order __m)
+  inline void*
+  atomic_exchange_explicit(atomic_address* __a, void* __v, memory_order __m)
   { return __a->exchange(__v, __m); }
 
-  inline bool 
-  atomic_compare_exchange_weak(volatile atomic_address* __a, 
-			       void** __v1, void* __v2)
-  { 
-    return __a->compare_exchange_weak(*__v1, __v2, memory_order_seq_cst, 
-				      memory_order_seq_cst); 
+  inline bool
+  atomic_compare_exchange_weak(atomic_address* __a, void** __v1, void* __v2)
+  {
+    return __a->compare_exchange_weak(*__v1, __v2, memory_order_seq_cst,
+				      memory_order_seq_cst);
   }
 
-  inline bool 
-  atomic_compare_exchange_strong(volatile atomic_address* __a, 
+  inline bool
+  atomic_compare_exchange_strong(atomic_address* __a,
 			       void** __v1, void* __v2)
-  { 
-    return __a->compare_exchange_strong(*__v1, __v2, memory_order_seq_cst, 
-				      memory_order_seq_cst); 
+  {
+    return __a->compare_exchange_strong(*__v1, __v2, memory_order_seq_cst,
+				      memory_order_seq_cst);
   }
 
-  inline bool 
-  atomic_compare_exchange_weak_explicit(volatile atomic_address* __a, 
-					void** __v1, void* __v2, 
+  inline bool
+  atomic_compare_exchange_weak_explicit(atomic_address* __a,
+					void** __v1, void* __v2,
 					memory_order __m1, memory_order __m2)
   { return __a->compare_exchange_weak(*__v1, __v2, __m1, __m2); }
 
-  inline bool 
-  atomic_compare_exchange_strong_explicit(volatile atomic_address* __a, 
-					void** __v1, void* __v2, 
-					memory_order __m1, memory_order __m2)
+  inline bool
+  atomic_compare_exchange_strong_explicit(atomic_address* __a,
+					  void** __v1, void* __v2,
+					  memory_order __m1, memory_order __m2)
   { return __a->compare_exchange_strong(*__v1, __v2, __m1, __m2); }
 
-  inline void* 
-  atomic_fetch_add_explicit(volatile atomic_address* __a, ptrdiff_t __d, 
+  inline void*
+  atomic_fetch_add_explicit(atomic_address* __a, ptrdiff_t __d,
 			    memory_order __m)
   { return __a->fetch_add(__d, __m); }
 
-  inline void* 
-  atomic_fetch_add(volatile atomic_address* __a, ptrdiff_t __d)
+  inline void*
+  atomic_fetch_add(atomic_address* __a, ptrdiff_t __d)
   { return __a->fetch_add(__d); }
 
-  inline void* 
-  atomic_fetch_sub_explicit(volatile atomic_address* __a, ptrdiff_t __d, 
+  inline void*
+  atomic_fetch_sub_explicit(atomic_address* __a, ptrdiff_t __d,
 			    memory_order __m)
   { return __a->fetch_sub(__d, __m); }
 
-  inline void* 
-  atomic_fetch_sub(volatile atomic_address* __a, ptrdiff_t __d)
+  inline void*
+  atomic_fetch_sub(atomic_address* __a, ptrdiff_t __d)
   { return __a->fetch_sub(__d); }
 
 
   // Convenience function definitions, atomic_bool.
-  inline bool 
-  atomic_is_lock_free(const volatile atomic_bool* __a)
+  inline bool
+  atomic_is_lock_free(const atomic_bool* __a)
   { return __a->is_lock_free(); }
 
-  inline void 
-  atomic_store(volatile atomic_bool* __a, bool __i)
+  inline void
+  atomic_store(atomic_bool* __a, bool __i)
   { __a->store(__i); }
 
-  inline void 
-  atomic_store_explicit(volatile atomic_bool* __a, bool __i, memory_order __m)
+  inline void
+  atomic_store_explicit(atomic_bool* __a, bool __i, memory_order __m)
   { __a->store(__i, __m); }
 
-  inline bool 
-  atomic_load(const volatile atomic_bool* __a)
+  inline bool
+  atomic_load(const atomic_bool* __a)
   { return __a->load(); }
 
-  inline bool 
-  atomic_load_explicit(const volatile atomic_bool* __a, memory_order __m)
+  inline bool
+  atomic_load_explicit(const atomic_bool* __a, memory_order __m)
   { return __a->load(__m); }
 
-  inline bool 
-  atomic_exchange(volatile atomic_bool* __a, bool __i)
+  inline bool
+  atomic_exchange(atomic_bool* __a, bool __i)
   { return __a->exchange(__i); }
 
-  inline bool 
-  atomic_exchange_explicit(volatile atomic_bool* __a, bool __i, 
-			   memory_order __m)
+  inline bool
+  atomic_exchange_explicit(atomic_bool* __a, bool __i, memory_order __m)
   { return __a->exchange(__i, __m); }
 
-  inline bool 
-  atomic_compare_exchange_weak(volatile atomic_bool* __a, bool* __i1, bool __i2)
-  { 
-    return __a->compare_exchange_weak(*__i1, __i2, memory_order_seq_cst, 
-				      memory_order_seq_cst); 
+  inline bool
+  atomic_compare_exchange_weak(atomic_bool* __a, bool* __i1, bool __i2)
+  {
+    return __a->compare_exchange_weak(*__i1, __i2, memory_order_seq_cst,
+				      memory_order_seq_cst);
   }
 
-  inline bool 
-  atomic_compare_exchange_strong(volatile atomic_bool* __a, 
-				 bool* __i1, bool __i2)
-  { 
-    return __a->compare_exchange_strong(*__i1, __i2, memory_order_seq_cst, 
-					memory_order_seq_cst); 
+  inline bool
+  atomic_compare_exchange_strong(atomic_bool* __a, bool* __i1, bool __i2)
+  {
+    return __a->compare_exchange_strong(*__i1, __i2, memory_order_seq_cst,
+					memory_order_seq_cst);
   }
 
-  inline bool 
-  atomic_compare_exchange_weak_explicit(volatile atomic_bool* __a, bool* __i1, 
-					bool __i2, memory_order __m1, 
+  inline bool
+  atomic_compare_exchange_weak_explicit(atomic_bool* __a, bool* __i1,
+					bool __i2, memory_order __m1,
 					memory_order __m2)
   { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
 
-  inline bool 
-  atomic_compare_exchange_strong_explicit(volatile atomic_bool* __a, 
-					  bool* __i1, bool __i2, 
+  inline bool
+  atomic_compare_exchange_strong_explicit(atomic_bool* __a,
+					  bool* __i1, bool __i2,
 					  memory_order __m1, memory_order __m2)
   { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }
 
@@ -712,131 +699,129 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   // Free standing functions. Template argument should be constricted
   // to intergral types as specified in the standard.
   template<typename _ITp>
-    inline void 
-    atomic_store_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, 
-			  memory_order __m)
+    inline void
+    atomic_store_explicit(__atomic_base<_ITp>* __a, _ITp __i, memory_order __m)
     { __a->store(__i, __m); }
 
   template<typename _ITp>
     inline _ITp
-    atomic_load_explicit(const volatile __atomic_base<_ITp>* __a, 
-			 memory_order __m)
-    { return __a->load(__m); } 
+    atomic_load_explicit(const __atomic_base<_ITp>* __a, memory_order __m)
+    { return __a->load(__m); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_exchange_explicit(volatile __atomic_base<_ITp>* __a, 
-			     _ITp __i, memory_order __m)
-    { return __a->exchange(__i, __m); } 
+    inline _ITp
+    atomic_exchange_explicit(__atomic_base<_ITp>* __a, _ITp __i,
+			     memory_order __m)
+    { return __a->exchange(__i, __m); }
 
   template<typename _ITp>
-    inline bool 
-    atomic_compare_exchange_weak_explicit(volatile __atomic_base<_ITp>* __a, 
-					  _ITp* __i1, _ITp __i2, 
+    inline bool
+    atomic_compare_exchange_weak_explicit(__atomic_base<_ITp>* __a,
+					  _ITp* __i1, _ITp __i2,
 					  memory_order __m1, memory_order __m2)
     { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
 
   template<typename _ITp>
-    inline bool 
-    atomic_compare_exchange_strong_explicit(volatile __atomic_base<_ITp>* __a, 
-					    _ITp* __i1, _ITp __i2, 
-					    memory_order __m1, 
+    inline bool
+    atomic_compare_exchange_strong_explicit(__atomic_base<_ITp>* __a,
+					    _ITp* __i1, _ITp __i2,
+					    memory_order __m1,
 					    memory_order __m2)
     { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_add_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, 
+    inline _ITp
+    atomic_fetch_add_explicit(__atomic_base<_ITp>* __a, _ITp __i,
 			      memory_order __m)
     { return __a->fetch_add(__i, __m); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_sub_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, 
+    inline _ITp
+    atomic_fetch_sub_explicit(__atomic_base<_ITp>* __a, _ITp __i,
 			      memory_order __m)
     { return __a->fetch_sub(__i, __m); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_and_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, 
+    inline _ITp
+    atomic_fetch_and_explicit(__atomic_base<_ITp>* __a, _ITp __i,
 			      memory_order __m)
     { return __a->fetch_and(__i, __m); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_or_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
+    inline _ITp
+    atomic_fetch_or_explicit(__atomic_base<_ITp>* __a, _ITp __i,
 			     memory_order __m)
     { return __a->fetch_or(__i, __m); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_xor_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, 
+    inline _ITp
+    atomic_fetch_xor_explicit(__atomic_base<_ITp>* __a, _ITp __i,
 			      memory_order __m)
     { return __a->fetch_xor(__i, __m); }
 
   template<typename _ITp>
-    inline bool 
-    atomic_is_lock_free(const volatile __atomic_base<_ITp>* __a)
+    inline bool
+    atomic_is_lock_free(const __atomic_base<_ITp>* __a)
     { return __a->is_lock_free(); }
 
   template<typename _ITp>
-    inline void 
-    atomic_store(volatile __atomic_base<_ITp>* __a, _ITp __i)
+    inline void
+    atomic_store(__atomic_base<_ITp>* __a, _ITp __i)
     { atomic_store_explicit(__a, __i, memory_order_seq_cst); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_load(const volatile __atomic_base<_ITp>* __a)
+    inline _ITp
+    atomic_load(const __atomic_base<_ITp>* __a)
     { return atomic_load_explicit(__a, memory_order_seq_cst); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_exchange(volatile __atomic_base<_ITp>* __a, _ITp __i)
+    inline _ITp
+    atomic_exchange(__atomic_base<_ITp>* __a, _ITp __i)
     { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }
 
   template<typename _ITp>
-    inline bool 
-    atomic_compare_exchange_weak(volatile __atomic_base<_ITp>* __a,
+    inline bool
+    atomic_compare_exchange_weak(__atomic_base<_ITp>* __a,
 				 _ITp* __i1, _ITp __i2)
-    { 
-      return atomic_compare_exchange_weak_explicit(__a, __i1, __i2, 
+    {
+      return atomic_compare_exchange_weak_explicit(__a, __i1, __i2,
 						   memory_order_seq_cst,
-						   memory_order_seq_cst); 
+						   memory_order_seq_cst);
     }
 
   template<typename _ITp>
-    inline bool 
-    atomic_compare_exchange_strong(volatile __atomic_base<_ITp>* __a, 
+    inline bool
+    atomic_compare_exchange_strong(__atomic_base<_ITp>* __a,
 				   _ITp* __i1, _ITp __i2)
-    { 
-      return atomic_compare_exchange_strong_explicit(__a, __i1, __i2, 
+    {
+      return atomic_compare_exchange_strong_explicit(__a, __i1, __i2,
 						     memory_order_seq_cst,
-						     memory_order_seq_cst); 
+						     memory_order_seq_cst);
     }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_add(volatile __atomic_base<_ITp>* __a, _ITp __i)
+    inline _ITp
+    atomic_fetch_add(__atomic_base<_ITp>* __a, _ITp __i)
     { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_sub(volatile __atomic_base<_ITp>* __a, _ITp __i)
+    inline _ITp
+    atomic_fetch_sub(__atomic_base<_ITp>* __a, _ITp __i)
     { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_and(volatile __atomic_base<_ITp>* __a, _ITp __i)
+    inline _ITp
+    atomic_fetch_and(__atomic_base<_ITp>* __a, _ITp __i)
     { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_or(volatile __atomic_base<_ITp>* __a, _ITp __i)
+    inline _ITp
+    atomic_fetch_or(__atomic_base<_ITp>* __a, _ITp __i)
     { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }
 
   template<typename _ITp>
-    inline _ITp 
-    atomic_fetch_xor(volatile __atomic_base<_ITp>* __a, _ITp __i)
+    inline _ITp
+    atomic_fetch_xor(__atomic_base<_ITp>* __a, _ITp __i)
     { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
 
   // @} group atomics
@@ -844,5 +829,3 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 _GLIBCXX_END_NAMESPACE
 
 #endif
-
-
diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index 8f9975dea1a496aa9bd5e0f348c151434962899f..44f2ec83e58c28ee98a5b8e3f68671ec93c02feb 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -41,7 +41,7 @@
 #include <condition_variable>
 #include <system_error>
 #include <exception>
-#include <cstdatomic>
+#include <atomic>
 #include <bits/functexcept.h>
 
 namespace std
diff --git a/libstdc++-v3/src/atomic.cc b/libstdc++-v3/src/atomic.cc
index 775bb7601c17ddeaed7e550b8407df889f8e770a..bff8fa98c647b2834fc9bb5d04e5563dc7174b38 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 df28ecae35855bdad917b09e176072debed09dac..5d6e5ddc14f241f9e93d6f5a402b854471a0fabc 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 c81f08e070f5f9e3642ca4b35ebbe184f11f8d43..41071d23b8117c5350682fdbd58ed93c563527f8 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
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
index e580d807585c95f7991342816e551dbb21995ac5..8769fa6ee9f90be1d9da7a0fe2a765d63a114fb0 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
@@ -30,19 +29,19 @@ int main()
 }
 
 // { dg-error "used here" "" { target *-*-* } 521 }
-// { dg-error "deleted function" "" { target *-*-* } 239 }
-// { dg-error "deleted function" "" { target *-*-* } 257 }
-// { dg-error "deleted function" "" { target *-*-* } 275 } 
-// { dg-error "deleted function" "" { target *-*-* } 293 }
-// { dg-error "deleted function" "" { target *-*-* } 311 }
-// { dg-error "deleted function" "" { target *-*-* } 329 }
-// { dg-error "deleted function" "" { target *-*-* } 347 }
-// { dg-error "deleted function" "" { target *-*-* } 365 }
-// { dg-error "deleted function" "" { target *-*-* } 383 }
-// { dg-error "deleted function" "" { target *-*-* } 401 }
-// { dg-error "deleted function" "" { target *-*-* } 419 }
-// { dg-error "deleted function" "" { target *-*-* } 437 }
-// { dg-error "deleted function" "" { target *-*-* } 455 }
-// { dg-error "deleted function" "" { target *-*-* } 473 }
-// { dg-error "deleted function" "" { target *-*-* } 491 }
+// { dg-error "deleted function" "" { target *-*-* } 231 }
+// { dg-error "deleted function" "" { target *-*-* } 249 }
+// { dg-error "deleted function" "" { target *-*-* } 267 }
+// { dg-error "deleted function" "" { target *-*-* } 285 }
+// { dg-error "deleted function" "" { target *-*-* } 303 }
+// { dg-error "deleted function" "" { target *-*-* } 321 }
+// { dg-error "deleted function" "" { target *-*-* } 339 }
+// { dg-error "deleted function" "" { target *-*-* } 357 }
+// { dg-error "deleted function" "" { target *-*-* } 375 }
+// { dg-error "deleted function" "" { target *-*-* } 393 }
+// { dg-error "deleted function" "" { target *-*-* } 411 }
+// { dg-error "deleted function" "" { target *-*-* } 429 }
+// { dg-error "deleted function" "" { target *-*-* } 447 }
+// { dg-error "deleted function" "" { target *-*-* } 465 }
+// { dg-error "deleted function" "" { target *-*-* } 483 }
 // { dg-excess-errors "In member function" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_list.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_list.cc
index f6ca51d00a147fd966ee8ddf6167d302225dd80b..142a5a14951f735bbdb2f7d6562bfe6ef216ca47 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_list.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_list.cc
@@ -17,14 +17,13 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
 {
   __gnu_test::copy_list_initializable test;
-  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(), 
+  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(),
 				       __gnu_test::integral_types::type());
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
index 9108b4bc1acdb65058a3c1a48bc3f7ec10464826..7f7cfd0e65bba50f96fbb41c0f7b253ac103b6f9 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
@@ -29,20 +28,20 @@ int main()
   return 0;
 }
 
-// { dg-error "used here" "" { target *-*-* } 560 } 
-// { dg-error "deleted function" "" { target *-*-* } 238 }
-// { dg-error "deleted function" "" { target *-*-* } 256 }
-// { dg-error "deleted function" "" { target *-*-* } 274 }
-// { dg-error "deleted function" "" { target *-*-* } 292 }
-// { dg-error "deleted function" "" { target *-*-* } 310 }
-// { dg-error "deleted function" "" { target *-*-* } 328 }
-// { dg-error "deleted function" "" { target *-*-* } 346 }
-// { dg-error "deleted function" "" { target *-*-* } 364 }
-// { dg-error "deleted function" "" { target *-*-* } 382 }
-// { dg-error "deleted function" "" { target *-*-* } 400 }
-// { dg-error "deleted function" "" { target *-*-* } 418 }
-// { dg-error "deleted function" "" { target *-*-* } 436 }
-// { dg-error "deleted function" "" { target *-*-* } 454 }
-// { dg-error "deleted function" "" { target *-*-* } 472 }
-// { dg-error "deleted function" "" { target *-*-* } 490 }
+// { dg-error "used here" "" { target *-*-* } 560 }
+// { dg-error "deleted function" "" { target *-*-* } 248 }
+// { dg-error "deleted function" "" { target *-*-* } 266 }
+// { dg-error "deleted function" "" { target *-*-* } 284 }
+// { dg-error "deleted function" "" { target *-*-* } 302 }
+// { dg-error "deleted function" "" { target *-*-* } 320 }
+// { dg-error "deleted function" "" { target *-*-* } 338 }
+// { dg-error "deleted function" "" { target *-*-* } 356 }
+// { dg-error "deleted function" "" { target *-*-* } 374 }
+// { dg-error "deleted function" "" { target *-*-* } 230 }
+// { dg-error "deleted function" "" { target *-*-* } 410 }
+// { dg-error "deleted function" "" { target *-*-* } 428 }
+// { dg-error "deleted function" "" { target *-*-* } 446 }
+// { dg-error "deleted function" "" { target *-*-* } 464 }
+// { dg-error "deleted function" "" { target *-*-* } 482 }
+// { dg-error "deleted function" "" { target *-*-* } 392 }
 // { dg-excess-errors "In member function" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/default.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/default.cc
index 114e1f4c3e5732c558817f2fa3d2afa1b727ec90..bdad02b4737a7dde5aa6ada68c9409a7a3bb789c 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/default.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/default.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/direct_list.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/direct_list.cc
index e7eefccc4bfb6685e1c1852fb5bd8cb9b27e0828..b6ac8e1b93db6be0fb2bccef4cb4024e8ea0913c 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/direct_list.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/direct_list.cc
@@ -17,14 +17,13 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
 {
   __gnu_test::direct_list_initializable test;
-  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(), 
+  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(),
 				       __gnu_test::integral_types::type());
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/single_value.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/single_value.cc
index 2f476b6cd25783e2cfdeacd4b317a7fc23f99c10..755782034ac0b47cc2c70c2d13e4a45a4867c4ba 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/single_value.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/single_value.cc
@@ -17,14 +17,13 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
 {
   __gnu_test::single_value_constructible test;
-  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(), 
+  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(),
 				       __gnu_test::integral_types::type());
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc
new file mode 100644
index 0000000000000000000000000000000000000000..4ace9f0cd63977b1fae5698ddbc30f14195828ea
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc
@@ -0,0 +1,39 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do link { xfail *-*-* } }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <atomic>
+
+struct dwordp
+{
+  int* p1;
+  int* p2;
+};
+
+void atomics()
+{
+  std::atomic<dwordp> a;
+  bool b = a.is_lock_free(); // { dg-excess-errors "undefined reference to" }
+}
+
+int main()
+{
+  atomics();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_assignment.cc b/libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_assignment.cc
index 8189b0fa750e7f6602f9759f4957dede4298ce4a..6acf7c84711ae6c4b837630c26eaedc930e08158 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_assignment.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_assignment.cc
@@ -17,15 +17,14 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_hooks.h>
 #include <testsuite_common_types.h>
 
 int main()
 {
   __gnu_test::integral_assignable test;
-  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(), 
+  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(),
 				       __gnu_test::integral_types::type());
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_conversion.cc b/libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_conversion.cc
index 0884f766d7c8f55165e3e23014ec6a6aef3e02e0..1c9c768d57d4e8ed062511e3f8b21d3914d77ec0 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_conversion.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_conversion.cc
@@ -17,15 +17,14 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_hooks.h>
 #include <testsuite_common_types.h>
 
 int main()
 {
   __gnu_test::integral_convertable test;
-  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(), 
+  __gnu_cxx::typelist::apply_generator(test, __gnu_test::atomics_tl(),
 				       __gnu_test::integral_types::type());
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/requirements/base_classes.cc b/libstdc++-v3/testsuite/29_atomics/atomic/requirements/base_classes.cc
index 4d297a11cff30332ffb9e60943cdfea6aceb5fb1..946f833d1f2c8f1f42d70ca31e2e185cb2222d53 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/requirements/base_classes.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/requirements/base_classes.cc
@@ -18,14 +18,14 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 void test01()
 {
   // Check for required base class.
   __gnu_test::has_required_base_class test;
-  __gnu_cxx::typelist::apply_generator(test, 
-				       __gnu_test::atomic_integrals::type(), 
-                                       __gnu_test::atomics_tl());
+  __gnu_cxx::typelist::apply_generator(test,
+				       __gnu_test::atomic_integrals::type(),
+				       __gnu_test::atomics_tl());
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
index cba7ae8daaf0f6022191b6feb20b829e3cc26e17..72bd5dd3a97b7cad15dbf27aa5a4947f2cbb3f4f 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
@@ -18,10 +18,9 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
 // This file tests explicit instantiation of basic_string
 
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_character.h>
 
 template class std::atomic<__gnu_test::pod_char>;
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/aggregate.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/aggregate.cc
index 8fbcef74e14a4eba03e98d4772685c692c1d393a..fa35b9cb20801cfd9270fc1c0987a7a2768fd6cb 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/aggregate.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/aggregate.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 int main()
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/assign_neg.cc
index 18da8bf6a315a180c40909aa76bd4ebf771694d8..0ec1321e116c3485840cbba262c6ccfdba82de2e 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/assign_neg.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 void test01()
 {
@@ -29,5 +28,5 @@ void test01()
   test_type t2;
   t1 = t2;
 }
-// { dg-error "used here" "" { target *-*-* } 30 } 
-// { dg-excess-errors "deleted function" } 
+// { dg-error "used here" "" { target *-*-* } 29 }
+// { dg-excess-errors "deleted function" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/copy_neg.cc
index e56c8cc1d6bed2a11345c63ee144d17064338b06..4ede58ff8bd8573a3a62ad006c07d3395a89e735 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/copy_neg.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 void test01()
 {
@@ -28,5 +27,5 @@ void test01()
   test_type t1;
   test_type t2(t1);
 }
-// { dg-error "used here" "" { target *-*-* } 29 } 
-// { dg-excess-errors "deleted function" } 
+// { dg-error "used here" "" { target *-*-* } 28 }
+// { dg-excess-errors "deleted function" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/default.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/default.cc
index 1fc6f8a5722f5bdabffbadd2288010dad85b5faf..7e08ebb6254ef47dd39ec56bd800014f57b5eaed 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/default.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/default.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 int main()
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/single_value.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/single_value.cc
index 543e51860070701e69ca02fd49e329568fad0ac3..7a2e94977a7c9c46a53fea12e6ed4909c372fed3 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/single_value.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/cons/single_value.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 int main()
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/requirements/standard_layout.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/requirements/standard_layout.cc
index e33c5eac00baa41a5076b92844df06105400dc98..cbabc1e3eb7aac1116cf4855304f5d0178be5f2e 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/requirements/standard_layout.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/requirements/standard_layout.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 void test01()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_address/requirements/trivial.cc b/libstdc++-v3/testsuite/29_atomics/atomic_address/requirements/trivial.cc
index 812591019e928604edebac57063fa9d6c658e217..00960802c4f2d9fccf7babfef55b1fa1c0b3ea7c 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_address/requirements/trivial.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_address/requirements/trivial.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 void test01()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
index 6cb09f34b7a1541920bb444d6011f48d353f2c27..36dc5fcf4b6f6c2710008f8e6b5044b2812acc8b 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
@@ -17,7 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_hooks.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/aggregate.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/aggregate.cc
index 91abf85482d7ffc0866fa61b128a3a8d984da466..1ad8bc4d4452daadfa95f1a656350e068a280636 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/aggregate.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/aggregate.cc
@@ -1,5 +1,5 @@
 // { dg-options "-std=gnu++0x" }
-// { dg-do compile } 
+// { dg-do compile }
 
 // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
 //
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 int main()
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc
index 7238831e5d745bc2deff7f00e5829e9e3d255ed6..924add880cf97cb44e01f0d903e8bc8ed4233b0e 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 void test01()
 {
@@ -29,5 +28,5 @@ void test01()
   test_type t2;
   t1 = t2;
 }
-// { dg-error "used here" "" { target *-*-* } 30 } 
-// { dg-excess-errors "deleted function" } 
+// { dg-error "used here" "" { target *-*-* } 29 }
+// { dg-excess-errors "deleted function" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc
index 5af9ea99a16da04d7479e99d59232345bd16a5c7..22cea6a391637d49373a7afd3e3d5c79b9baa793 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 void test01()
 {
@@ -28,5 +27,5 @@ void test01()
   test_type t1;
   test_type t2(t1);
 }
-// { dg-error "used here" "" { target *-*-* } 29 } 
-// { dg-excess-errors "deleted function" } 
+// { dg-error "used here" "" { target *-*-* } 28 }
+// { dg-excess-errors "deleted function" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/default.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/default.cc
index df6d7dc1af36156c341e02407507859f0575a73b..38b6544e3d5e390db1768dada021920d62134493 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/default.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/default.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 int main()
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/standard_layout.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/standard_layout.cc
index fbeea176be459db620c6fe8d5106091b5b323fa8..362b8d46a9337d07c6229295ebf5c8ab7a8bff7d 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/standard_layout.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/standard_layout.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 void test01()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/trivial.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/trivial.cc
index 59b9db8a7ac790771e4d18571dbc28eab6713460..41e275c299633e8bfc95cfeb7cdd139637a06f30 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/trivial.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/trivial.cc
@@ -18,8 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 void test01()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.c b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.c
index d52da44d694bd34613df3f9e45d7ffd0aa955ecb..025fdcb08e5659c38a9c0537d5eb6655a7019c84 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.c
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.c
@@ -17,7 +17,6 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
 #include <stdatomic.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
index d51dc46efa3e4c5a3ddc85adfaaff3eec84dfd2b..ef69e02dea58ccf06a4b49c536490c0ce584f48c 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 int main()
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.c b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.c
index 87f320aea29c1a61c251dd03c8e9f4dd0221a4a9..1ab92948416fb280e0245b958c17b8b622147b40 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.c
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.c
@@ -17,7 +17,6 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
 #include <stdatomic.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
index 9bac4a0455c3bcab0f58efd84fff3929509738b1..825174d390f950651829489173f6dc1309d37bd4 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 
 int main()
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
index cf69ab2ee5674972f221dd8b4cb8e697fd3c9138..d21e30c3310ee30369be16979ecd7abadaa9ba21 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
@@ -18,24 +18,23 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
 {
   __gnu_test::assignable test;
-  __gnu_cxx::typelist::apply_generator(test, 
+  __gnu_cxx::typelist::apply_generator(test,
 				       __gnu_test::atomic_integrals::type());
   return 0;
 }
 
 // { dg-error "used here" "" { target *-*-* } 521 }
-// { dg-excess-errors "deleted function" } 
-// { dg-excess-errors "deleted function" } 
-// { dg-error "instantiated from" "" { target *-*-* } 29 } 
-// { dg-error "instantiated from" "" { target *-*-* } 528 } 
-// { dg-error "instantiated from" "" { target *-*-* } 170 } 
+// { dg-excess-errors "deleted function" }
+// { dg-excess-errors "deleted function" }
+// { dg-error "instantiated from" "" { target *-*-* } 28 }
+// { dg-error "instantiated from" "" { target *-*-* } 528 }
+// { dg-error "instantiated from" "" { target *-*-* } 170 }
 // { dg-error "instantiated from" "" { target *-*-* } 399 }
-// { dg-error "instantiated from" "" { target *-*-* } 168 }  
+// { dg-error "instantiated from" "" { target *-*-* } 168 }
 // { dg-excess-errors "In member function" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_list.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_list.cc
index 517c7fe2f2a99a1337c6c50f1f4b3c6cb93924ae..f2456360ef34c6b767cad775b36add8bcb879ee7 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_list.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_list.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
index 369cba826f427128cffd7d5f4533078eeb299059..be0580a46b295f0f9920362001169fbd5ea443b2 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
@@ -18,24 +18,23 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
 {
   __gnu_test::copy_constructible test;
-  __gnu_cxx::typelist::apply_generator(test, 
+  __gnu_cxx::typelist::apply_generator(test,
 				       __gnu_test::atomic_integrals::type());
   return 0;
 }
 
 // { dg-error "used here" "" { target *-*-* } 560 }
-// { dg-excess-errors "deleted function" } 
-// { dg-excess-errors "deleted function" } 
-// { dg-error "instantiated from" "" { target *-*-* } 29 } 
-// { dg-error "instantiated from" "" { target *-*-* } 566 } 
-// { dg-error "instantiated from" "" { target *-*-* } 170 } 
+// { dg-excess-errors "deleted function" }
+// { dg-excess-errors "deleted function" }
+// { dg-error "instantiated from" "" { target *-*-* } 28 }
+// { dg-error "instantiated from" "" { target *-*-* } 566 }
+// { dg-error "instantiated from" "" { target *-*-* } 170 }
 // { dg-error "instantiated from" "" { target *-*-* } 399 }
-// { dg-error "instantiated from" "" { target *-*-* } 168 }  
+// { dg-error "instantiated from" "" { target *-*-* } 168 }
 // { dg-excess-errors "In member function" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/default.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/default.cc
index 174b789a8c69eb95bd87a409805df72087385ce9..613e935c84310b420d99b225eac32b8e07906a05 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/default.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/default.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/direct_list.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/direct_list.cc
index 7a30fc6b9d9cca2068b9844521b8f918dd3ada35..3e8f9c3f8bee2e8d7e8b8b675018e36386d8a859 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/direct_list.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/direct_list.cc
@@ -17,15 +17,14 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
 {
   __gnu_test::direct_list_initializable test;
-  __gnu_cxx::typelist::apply_generator(test, 
-				       __gnu_test::atomic_integrals::type(), 
+  __gnu_cxx::typelist::apply_generator(test,
+				       __gnu_test::atomic_integrals::type(),
 				       __gnu_test::integral_types::type());
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/single_value.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/single_value.cc
index a2b473ea903362caf302b456445e807177297c65..8787a1596e70f86c5db5a7a31b972dc70002a79a 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/single_value.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/single_value.cc
@@ -17,15 +17,14 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
 {
   __gnu_test::single_value_constructible test;
-  __gnu_cxx::typelist::apply_generator(test, 
-				       __gnu_test::atomic_integrals::type(), 
+  __gnu_cxx::typelist::apply_generator(test,
+				       __gnu_test::atomic_integrals::type(),
 				       __gnu_test::integral_types::type());
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise.cc
index 44fb712c7f456656b3118990de6dfb258375f5db..99940b8d293834493da23445ad138211ec97508c 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise.cc
@@ -1,25 +1,24 @@
 // { dg-options "-std=gnu++0x" }
 // { dg-do compile }
 // -*- C++ -*-
- 
+
 // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
- 
+
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
 // published by the Free Software Foundation; either version 3, or (at
 // your option) any later version.
- 
+
 // This library is distributed in the hope that it will be useful, but
 // WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // General Public License for more details.
- 
+
 // You should have received a copy of the GNU General Public License
 // along with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
- 
- 
-#include <cstdatomic>
+
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
index dcea4cfaa11973f2a58a6aeab41c13d242f1ce05..c7a5dc3098ea4416c1bd2e7aed3e2e7f12edfec3 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
@@ -1,25 +1,24 @@
 // { dg-options "-std=gnu++0x" }
 // { dg-do compile }
 // -*- C++ -*-
- 
+
 // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
- 
+
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
 // published by the Free Software Foundation; either version 3, or (at
 // your option) any later version.
- 
+
 // This library is distributed in the hope that it will be useful, but
 // WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // General Public License for more details.
- 
+
 // You should have received a copy of the GNU General Public License
 // along with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
- 
- 
-#include <cstdatomic>
+
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement.cc
index edfc7e8c722c681249873dc4c94ae07f700f3605..fd26644124edd3be1a90e59f34f097814b4c1655 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement.cc
@@ -1,25 +1,24 @@
 // { dg-options "-std=gnu++0x" }
 // { dg-do compile }
 // -*- C++ -*-
- 
+
 // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
- 
+
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
 // published by the Free Software Foundation; either version 3, or (at
 // your option) any later version.
- 
+
 // This library is distributed in the hope that it will be useful, but
 // WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // General Public License for more details.
- 
+
 // You should have received a copy of the GNU General Public License
 // along with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
- 
- 
-#include <cstdatomic>
+
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
index 940b0671e63c2ea0a0ca1a404e9ebad2effc6d8b..59598283df1dc5ef02f167c560d5853dc7a55502 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
@@ -1,25 +1,24 @@
 // { dg-options "-std=gnu++0x" }
 // { dg-do compile }
 // -*- C++ -*-
- 
+
 // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
- 
+
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
 // published by the Free Software Foundation; either version 3, or (at
 // your option) any later version.
- 
+
 // This library is distributed in the hope that it will be useful, but
 // WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // General Public License for more details.
- 
+
 // You should have received a copy of the GNU General Public License
 // along with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
- 
- 
-#include <cstdatomic>
+
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment.cc
index bac73f0ce30d63fd31d1862d36ff9c7f2ce2d0bf..e1e8690976beb1fe638ca5dbee530e66f06647c4 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment.cc
@@ -1,25 +1,24 @@
 // { dg-options "-std=gnu++0x" }
 // { dg-do compile }
 // -*- C++ -*-
- 
+
 // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
- 
+
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
 // published by the Free Software Foundation; either version 3, or (at
 // your option) any later version.
- 
+
 // This library is distributed in the hope that it will be useful, but
 // WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // General Public License for more details.
- 
+
 // You should have received a copy of the GNU General Public License
 // along with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
- 
- 
-#include <cstdatomic>
+
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
index 555f1a98e03d52501a6f58048cc24abe02c757f9..9cff37774ecd28bdbeef69b3e4fac82fb9697f7a 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
@@ -1,25 +1,24 @@
 // { dg-options "-std=gnu++0x" }
 // { dg-do compile }
 // -*- C++ -*-
- 
+
 // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
- 
+
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
 // published by the Free Software Foundation; either version 3, or (at
 // your option) any later version.
- 
+
 // This library is distributed in the hope that it will be useful, but
 // WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // General Public License for more details.
- 
+
 // You should have received a copy of the GNU General Public License
 // along with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
- 
- 
-#include <cstdatomic>
+
+#include <atomic>
 #include <testsuite_common_types.h>
 
 int main()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_assignment.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_assignment.cc
index 062339a71006c74532a17fb6da6fee9b5e992e06..728b53a1626a87cd5424969d51ec3eca0b3402c9 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_assignment.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_assignment.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_hooks.h>
 #include <testsuite_common_types.h>
 
@@ -26,7 +25,7 @@ int main()
 {
   __gnu_test::integral_assignable test;
   __gnu_cxx::typelist::apply_generator(test,
-				       __gnu_test::atomic_integrals::type(), 
+				       __gnu_test::atomic_integrals::type(),
 				       __gnu_test::integral_types::type());
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_conversion.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_conversion.cc
index fb9c7c43d7f68baf00324a6a3c0eeb5b210429df..ab642f3e6896deb76c1c7d41cf9eff6dde52376f 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_conversion.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_conversion.cc
@@ -17,8 +17,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_hooks.h>
 #include <testsuite_common_types.h>
 
@@ -26,7 +25,7 @@ int main()
 {
   __gnu_test::integral_convertable test;
   __gnu_cxx::typelist::apply_generator(test,
-				       __gnu_test::atomic_integrals::type(), 
+				       __gnu_test::atomic_integrals::type(),
 				       __gnu_test::integral_types::type());
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/standard_layout.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/standard_layout.cc
index c9b81a36658c3cc564a2fbaada69b4994248fb0f..66e231b8413147733d7f2b3fd9e0250301ce200d 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/standard_layout.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/standard_layout.cc
@@ -19,13 +19,13 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 void test01()
 {
   // Check for standard layout requirements
   __gnu_test::standard_layout test;
-  __gnu_cxx::typelist::apply_generator(test, 
+  __gnu_cxx::typelist::apply_generator(test,
 				       __gnu_test::atomic_integrals::type());
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/trivial.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/trivial.cc
index e5e8579303656ab5dffcffd7fc76789eaf2f453b..f75fcb0e4fd764b2b407a2ce7ea82a254311b9b5 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/trivial.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/trivial.cc
@@ -18,13 +18,12 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-
-#include <cstdatomic>
+#include <atomic>
 #include <testsuite_common_types.h>
 
 void test01()
 {
   __gnu_test::has_trivial_cons_dtor test;
-  __gnu_cxx::typelist::apply_generator(test, 
+  __gnu_cxx::typelist::apply_generator(test,
 				       __gnu_test::atomic_integrals::type());
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/functions_std_c++0x.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/functions_std_c++0x.cc
similarity index 98%
rename from libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/functions_std_c++0x.cc
rename to libstdc++-v3/testsuite/29_atomics/headers/atomic/functions_std_c++0x.cc
index ad43813dd7576e848039cc518c57065dfe1b8768..7af4369aa9315b6f910b6c1cf7013df0b6848c80 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/functions_std_c++0x.cc
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/functions_std_c++0x.cc
@@ -18,7 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <cstdatomic>
+#include <atomic>
 
 namespace gnu
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/macros.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
similarity index 98%
rename from libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/macros.cc
rename to libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
index 1e2ae1f1b71dce298a5edb02fecaa751a28326e8..c0419c9b8d8de434c6e6f215512e313f2c3fd083 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/macros.cc
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
@@ -18,7 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <cstdatomic>
+#include <atomic>
 
 namespace gnu
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/std_c++0x_neg.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc
similarity index 92%
rename from libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/std_c++0x_neg.cc
rename to libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc
index 044794c880ad355b4215954b6f7a7ad323db6cfa..e76ff8ed53c9904c7ad8164a03e4dd03de565bfb 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc
@@ -18,7 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <cstdatomic>  // { dg-excess-errors "In file included from" }
+#include <atomic>  // { dg-excess-errors "In file included from" }
 
 // { dg-error "upcoming ISO" "" { target *-*-* } 31 } 
 
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/types_std_c++0x.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x.cc
similarity index 99%
rename from libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/types_std_c++0x.cc
rename to libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x.cc
index d3c3ea470dde059905ab2e1cc94f94f73cb6b6a9..ce1e04359ad18e2851e8076452b159713566314f 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/cstdatomic/types_std_c++0x.cc
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x.cc
@@ -18,7 +18,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <cstdatomic>
+#include <atomic>
 
 void test01()
 {
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc
new file mode 100644
index 0000000000000000000000000000000000000000..cbdb5e6fcb223ea0c23929d0e0cb23b7a3c78ce9
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc
@@ -0,0 +1,78 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <atomic>
+
+void test01()
+{
+  // Not global scoped, only namespace std.
+  using memory_order;
+  using memory_order_relaxed;
+  using memory_order_consume;
+  using memory_order_acquire;
+  using memory_order_release;
+  using memory_order_acq_rel;
+  using memory_order_seq_cst;
+
+  using atomic_flag;
+
+  using atomic_bool;
+  using atomic_char;
+  using atomic_schar;
+  using atomic_uchar;
+  using atomic_short;
+  using atomic_ushort;
+  using atomic_int;
+  using atomic_uint;
+  using atomic_long;
+  using atomic_ulong;
+  using atomic_llong;
+  using atomic_ullong;
+  using atomic_wchar_t;
+  using atomic_char16_t;
+  using atomic_char32_t;
+
+  using atomic_address;
+}
+
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 26 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 27 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 28 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 29 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 30 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 31 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 32 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 34 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 36 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 37 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 38 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 39 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 40 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 41 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 42 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 43 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 44 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 45 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 46 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 47 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 48 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 49 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 50 }
+// { dg-error "expected nested-name-specifier" "" { target *-*-* } 52 }
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/functions.c b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/functions.c
index 9c9fe7d1ec81968181223ded71806a1f1952f42e..d56937678e2be72f2994e9c0f18cd3ae88462fbd 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/functions.c
+++ b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/functions.c
@@ -22,8 +22,8 @@
 
 int main()
 {
-  volatile atomic_flag f;
-  volatile atomic_flag* p = &f;
+  atomic_flag f;
+  atomic_flag* p = &f;
   memory_order m = memory_order_relaxed;
 
   // For position only.
diff --git a/libstdc++-v3/testsuite/util/testsuite_common_types.h b/libstdc++-v3/testsuite/util/testsuite_common_types.h
index a6c58be6f31207723cc7606abdb73aac90985696..ac2684ad09b981ed7328ac1e916f0511a135c96b 100644
--- a/libstdc++-v3/testsuite/util/testsuite_common_types.h
+++ b/libstdc++-v3/testsuite/util/testsuite_common_types.h
@@ -44,7 +44,7 @@
 #include <tr1/unordered_set>
 
 #ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <cstdatomic>
+#include <atomic>
 #include <type_traits>
 #endif