On Wed, 11 Mar 2026, 05:29 Alexandre Oliva, <[email protected]> wrote:
> > compare_exchange_weak is allowed to fail spuriously, and we're > actually hitting such spurious failures quite often on ppc-vx7r2, > presumably when random interrupts hit between ll and sc. > > Tolerate one such failure, hopefully that will suffice. > This is a bit of a problem, because we can't tell if the padding was cleared or not. If it was not clear, the first compare_exchange_weak would clear it, and the refund would succeed. But we want the test to fail in that case. I'll have a think about this when I'm properly awake... > Regstrapped on x86_64-linux-gnu, also tested with gcc-15 for ppc-vx7r2. > Ok to install? > > > for libstdc++-v3/ChangeLog > > * testsuite/29_atomics/atomic/compare_exchange_padding.cc: > Tolerate one compare_exchange_weak spurious failure. > --- > .../29_atomics/atomic/compare_exchange_padding.cc | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git > a/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc > b/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc > index d9c7b90c1a5c1..3fc2f6b4f8031 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc > @@ -37,8 +37,8 @@ main () > fill_struct(n); > n.c = 'b'; > n.s = 71; > - // padding cleared on compexchg > - VERIFY( as.compare_exchange_weak(s, n) ); > + // padding cleared on compexchg. tolerate one spurious _weak failure. > + VERIFY( as.compare_exchange_weak(s, n) || as.compare_exchange_weak(s, > n) ); > VERIFY( as.compare_exchange_strong(n, s) ); > return 0; > } > > -- > Alexandre Oliva, happy hacker https://blog.lx.oliva.nom.br/ > Free Software Activist FSFLA co-founder GNU Toolchain Engineer > More tolerance and less prejudice are key for inclusion and diversity. > Excluding neuro-others for not behaving ""normal"" is *not* inclusive! >
