testsuite: tolerate compare_exchange_weak spurious failure
Jonathan Wakely
jwakely.gcc@gmail.com
Wed Mar 11 09:14:47 GMT 2026
On Wed, 11 Mar 2026, 08:58 Jonathan Wakely, <jwakely.gcc@gmail.com> wrote:
>
>
> 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...
>
We could put a loop around it and redo both the fill struct call and the
weak cmpxchg until it succeeds.
>
>
>> 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/c9bd4402/attachment.htm>
More information about the Libstdc++
mailing list