This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix <atomic> in -std=c++2a mode (PR libstdc++/89641)


Hi!

The following patch fixes in
make -j32 -k check 'RUNTESTFLAGS=--target_board=unix/-std=gnu++2a'
-FAIL: 29_atomics/atomic/69301.cc (test for excess errors)
-FAIL: 29_atomics/atomic/requirements/compare_exchange_lowering.cc (test for excess errors)
-FAIL: 29_atomics/atomic/70766.cc (test for excess errors)
-FAIL: 29_atomics/atomic/requirements/explicit_instantiation/1.cc (test for excess errors)
-FAIL: 29_atomics/atomic_integral/operators/increment.cc (test for excess errors)
-FAIL: 29_atomics/atomic/cons/49445.cc (test for excess errors)
-FAIL: 29_atomics/atomic/nonmembers.cc (test for excess errors)
-FAIL: 29_atomics/atomic/operators/51811.cc (test for excess errors)
-FAIL: 29_atomics/atomic_integral/operators/bitwise.cc (test for excess errors)
-FAIL: 29_atomics/atomic_integral/operators/decrement.cc (test for excess errors)
-FAIL: experimental/net/internet/address/v4/members.cc (test for excess errors)
-FAIL: experimental/net/internet/resolver/base.cc (test for excess errors)
-FAIL: experimental/net/internet/resolver/ops/lookup.cc (test for excess errors)
-FAIL: experimental/net/internet/resolver/ops/reverse.cc (test for excess errors)
-FAIL: experimental/net/timer/waitable/cons.cc (test for excess errors)
-FAIL: experimental/net/timer/waitable/dest.cc (test for excess errors)
-FAIL: experimental/net/headers.cc (test for excess errors)
-FAIL: experimental/net/timer/waitable/ops.cc (test for excess errors)
-FAIL: experimental/net/internet/address/v4/comparisons.cc (test for excess errors)
-FAIL: experimental/net/internet/address/v4/cons.cc (test for excess errors)
-FAIL: experimental/net/internet/address/v4/creation.cc (test for excess errors)
+FAIL: experimental/net/internet/resolver/ops/lookup.cc execution test
(guess the FAILed test with the patch would FAIL even without it if it
wouldn't fail to compile).  From the above I believe the testsuite coverage
is already sufficient and no need to add further tests.

Ok for trunk if normal bootstrap/regtest succeeds (i.e. including the default flags
testing)?

2019-03-10  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/89641
	* include/std/atomic (atomic<T>::store, atomic<T>::load,
	atomic<T>::exchange, atomic<T>::compare_exchange_weak,
	atomic<T>::compare_exchange_strong): Cast __m or __s and __f to int.
	* include/bits/atomic_base.h (__atomic_base<T>::operator++,
	__atomic_base<T>::operator--, __atomic_base<T>::operator+=,
	__atomic_base<T>::operator-=, __atomic_base<T>::operator&=,
	__atomic_base<T>::operator|=, __atomic_base<T>::operator^=,
	__atomic_base<T*>::operator++, __atomic_base<T*>::operator--,
	__atomic_base<T*>::operator+=, __atomic_base<T*>::operator-=): Cast
	memory_order_seq_cst to int.

--- libstdc++/include/std/atomic.jj	2019-02-19 09:33:08.863295468 +0100
+++ libstdc++/include/std/atomic	2019-03-10 21:35:47.021085976 +0100
@@ -240,18 +240,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       void
       store(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept
-      { __atomic_store(std::__addressof(_M_i), std::__addressof(__i), __m); }
+      { __atomic_store(std::__addressof(_M_i), std::__addressof(__i), int(__m)); }
 
       void
       store(_Tp __i, memory_order __m = memory_order_seq_cst) volatile noexcept
-      { __atomic_store(std::__addressof(_M_i), std::__addressof(__i), __m); }
+      { __atomic_store(std::__addressof(_M_i), std::__addressof(__i), int(__m)); }
 
       _Tp
       load(memory_order __m = memory_order_seq_cst) const noexcept
       {
 	alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
 	_Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
-	__atomic_load(std::__addressof(_M_i), __ptr, __m);
+	__atomic_load(std::__addressof(_M_i), __ptr, int(__m));
 	return *__ptr;
       }
 
@@ -260,7 +260,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       {
         alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
 	_Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
-	__atomic_load(std::__addressof(_M_i), __ptr, __m);
+	__atomic_load(std::__addressof(_M_i), __ptr, int(__m));
 	return *__ptr;
       }
 
@@ -270,7 +270,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
         alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
 	_Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
 	__atomic_exchange(std::__addressof(_M_i), std::__addressof(__i),
-			  __ptr, __m);
+			  __ptr, int(__m));
 	return *__ptr;
       }
 
@@ -281,7 +281,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
         alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
 	_Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
 	__atomic_exchange(std::__addressof(_M_i), std::__addressof(__i),
-			  __ptr, __m);
+			  __ptr, int(__m));
 	return *__ptr;
       }
 
@@ -292,7 +292,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	return __atomic_compare_exchange(std::__addressof(_M_i),
 					 std::__addressof(__e),
 					 std::__addressof(__i),
-					 true, __s, __f);
+					 true, int(__s), int(__f));
       }
 
       bool
@@ -302,7 +302,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	return __atomic_compare_exchange(std::__addressof(_M_i),
 					 std::__addressof(__e),
 					 std::__addressof(__i),
-					 true, __s, __f);
+					 true, int(__s), int(__f));
       }
 
       bool
@@ -324,7 +324,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	return __atomic_compare_exchange(std::__addressof(_M_i),
 					 std::__addressof(__e),
 					 std::__addressof(__i),
-					 false, __s, __f);
+					 false, int(__s), int(__f));
       }
 
       bool
@@ -334,7 +334,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	return __atomic_compare_exchange(std::__addressof(_M_i),
 					 std::__addressof(__e),
 					 std::__addressof(__i),
-					 false, __s, __f);
+					 false, int(__s), int(__f));
       }
 
       bool
--- libstdc++/include/bits/atomic_base.h.jj	2019-03-07 20:07:22.241979819 +0100
+++ libstdc++/include/bits/atomic_base.h	2019-03-10 21:32:17.980498667 +0100
@@ -316,59 +316,59 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       __int_type
       operator++() noexcept
-      { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
+      { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); }
 
       __int_type
       operator++() volatile noexcept
-      { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
+      { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); }
 
       __int_type
       operator--() noexcept
-      { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
+      { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); }
 
       __int_type
       operator--() volatile noexcept
-      { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
+      { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); }
 
       __int_type
       operator+=(__int_type __i) noexcept
-      { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       __int_type
       operator+=(__int_type __i) volatile noexcept
-      { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       __int_type
       operator-=(__int_type __i) noexcept
-      { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       __int_type
       operator-=(__int_type __i) volatile noexcept
-      { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       __int_type
       operator&=(__int_type __i) noexcept
-      { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       __int_type
       operator&=(__int_type __i) volatile noexcept
-      { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       __int_type
       operator|=(__int_type __i) noexcept
-      { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       __int_type
       operator|=(__int_type __i) volatile noexcept
-      { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       __int_type
       operator^=(__int_type __i) noexcept
-      { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       __int_type
       operator^=(__int_type __i) volatile noexcept
-      { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
+      { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
 
       bool
       is_lock_free() const noexcept
@@ -652,42 +652,42 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       __pointer_type
       operator++() noexcept
       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
-				  memory_order_seq_cst); }
+				  int(memory_order_seq_cst)); }
 
       __pointer_type
       operator++() volatile noexcept
       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
-				  memory_order_seq_cst); }
+				  int(memory_order_seq_cst)); }
 
       __pointer_type
       operator--() noexcept
       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
-				  memory_order_seq_cst); }
+				  int(memory_order_seq_cst)); }
 
       __pointer_type
       operator--() volatile noexcept
       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
-				  memory_order_seq_cst); }
+				  int(memory_order_seq_cst)); }
 
       __pointer_type
       operator+=(ptrdiff_t __d) noexcept
       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
-				  memory_order_seq_cst); }
+				  int(memory_order_seq_cst)); }
 
       __pointer_type
       operator+=(ptrdiff_t __d) volatile noexcept
       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
-				  memory_order_seq_cst); }
+				  int(memory_order_seq_cst)); }
 
       __pointer_type
       operator-=(ptrdiff_t __d) noexcept
       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
-				  memory_order_seq_cst); }
+				  int(memory_order_seq_cst)); }
 
       __pointer_type
       operator-=(ptrdiff_t __d) volatile noexcept
       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
-				  memory_order_seq_cst); }
+				  int(memory_order_seq_cst)); }
 
       bool
       is_lock_free() const noexcept

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]