testsuite: tolerate compare_exchange_weak spurious failure

Jonathan Wakely jwakely.gcc@gmail.com
Wed Mar 11 11:41:07 GMT 2026


On Wed, 11 Mar 2026 at 10:56, Alexandre Oliva <oliva@adacore.com> wrote:
>
> On Mar 11, 2026, 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.
>
> Erhm...  My understanding is that, when it returns false, no memory is
> changed, so the second attempt would start from exactly the same state
> as the first.

"Remarks: A weak compare-and-exchange operation may fail spuriously.
That is, even when the contents of memory referred to by expected and
ptr are equal, it may return false and store back to expected the same
memory contents that were originally there."

So `expected` is updated on a spurious failure, even if that doesn't
change any bits.


More information about the Libstdc++ mailing list