https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93224
--- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> ---
Reduced test-case:
#include <atomic>
int main()
{
long double value;
if constexpr (std::atomic_ref<long double>::is_always_lock_free)
{
bool ok;
const auto mo = std::memory_order_relaxed;
std::atomic_ref<long double> a(value);
a.exchange(1.0l);
auto expected = 1.0l;
ok = a.compare_exchange_strong(expected, 204.8l, mo);
expected = a.load() + 2;
ok = a.compare_exchange_strong(expected, 1.0l, mo);
a.fetch_add(3.2l);
if ( a != 208.0l )
__builtin_abort ();
}
return 0;
}