testsuite: tolerate compare_exchange_weak spurious failure
Jonathan Wakely
jwakely.gcc@gmail.com
Wed Mar 11 08:58:00 GMT 2026
On Wed, 11 Mar 2026, 05:29 Alexandre Oliva, <oliva@adacore.com> 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!
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20260311/971c652d/attachment-0001.htm>
More information about the Libstdc++
mailing list