Re: [PATCH] Fix in -std=c++2a mode (PR libstdc++/89641)

2019-03-11 Thread Jonathan Wakely

On 11/03/19 08:58 +0100, Jakub Jelinek wrote:

On Sun, Mar 10, 2019 at 10:36:08PM +0100, Jakub Jelinek wrote:

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


Normal bootstrap/regtest on x86_64-linux and i686-linux succeeded too.


2019-03-10  Jakub Jelinek  

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


OK for trunk, thanks.

I'll make sure we have a test that runs routinely with -std=gnu++2a.



Re: [PATCH] Fix in -std=c++2a mode (PR libstdc++/89641)

2019-03-11 Thread Jakub Jelinek
On Sun, Mar 10, 2019 at 10:36:08PM +0100, Jakub Jelinek wrote:
> Ok for trunk if normal bootstrap/regtest succeeds (i.e. including the default 
> flags
> testing)?

Normal bootstrap/regtest on x86_64-linux and i686-linux succeeded too.

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

Jakub


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

2019-03-10 Thread Jakub Jelinek
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  

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

--- libstdc++/include/std/atomic.jj 2019-02-19 09:33:08.863295468 +0100
+++ libstdc++/include/std/atomic2019-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),