I fixed on 2.44 (1e7935ae87550323021876f3099bb04aeadd8491) and backported to 2.43. I am not sure which is the gnulib policy in this case.
On 27/05/26 14:15, Bruno Haible wrote: > Running a Gnulib testdir on Ubuntu Cinnamon 26.04, there is 1 test failure: > > FAIL: test-fma2 > =============== > > ../../gltests/test-fma2.h:228: assertion 'result == expected' failed > > FAIL test-fma2 (exit status: 134) > > This patch provides a workaround. > > > 2026-05-27 Bruno Haible <[email protected]> > > fma: Work around glibc 2.43 regression. > * m4/fma.m4 (gl_FUNC_FMA_WORKS): Check against glibc 2.43 bug. > * doc/posix-functions/fma.texi: Mention glibc 2.43 as being buggy. > > diff --git a/doc/posix-functions/fma.texi b/doc/posix-functions/fma.texi > index ec45e5286d..9be058efea 100644 > --- a/doc/posix-functions/fma.texi > +++ b/doc/posix-functions/fma.texi > @@ -15,7 +15,9 @@ > FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, > Solaris 9, MSVC 9. > @item > This function produces wrong results on some platforms: > -glibc 2.11, Mac OS X 10.5, FreeBSD 6.4/x86, NetBSD 8.0, OpenBSD 7.4/arm64, > Cygwin 1.5, mingw. > +@c https://sourceware.org/bugzilla/show_bug.cgi?id=34183 > +glibc 2.43, > +Mac OS X 10.5, FreeBSD 6.4/x86, NetBSD 8.0, OpenBSD 7.4/arm64, Cygwin 1.5, > mingw. > @end itemize > > Portability problems not fixed by Gnulib: > diff --git a/m4/fma.m4 b/m4/fma.m4 > index 49c705df6c..cf9d7b888a 100644 > --- a/m4/fma.m4 > +++ b/m4/fma.m4 > @@ -1,5 +1,5 @@ > # fma.m4 > -# serial 9 > +# serial 10 > dnl Copyright (C) 2011-2026 Free Software Foundation, Inc. > dnl This file is free software; the Free Software Foundation > dnl gives unlimited permission to copy and/or distribute it, > @@ -52,7 +52,8 @@ AC_DEFUN([gl_FUNC_FMA] > AC_SUBST([FMA_LIBM]) > ]) > > -dnl Test whether fma() has any of the 7 known bugs of glibc 2.11.3 on x86_64. > +dnl Test whether fma() has any of the 7 known bugs of glibc 2.11.3 on x86_64 > +dnl and the 1 known bug of glibc 2.43 on x86_64. > AC_DEFUN([gl_FUNC_FMA_WORKS], > [ > AC_REQUIRE([AC_PROG_CC]) > @@ -134,6 +135,21 @@ AC_DEFUN([gl_FUNC_FMA_WORKS] > therefore the rounding must round down and produce (2^53 - 2^0). */ > volatile double expected = ldexp (1.0, DBL_MANT_DIG) - 1.0; > volatile double result = my_fma (x, y, z); > + if (result != expected) > + failed_tests |= 8; > + } > + /* This test fails on glibc 2.43 on x86_64. > + <https://sourceware.org/bugzilla/show_bug.cgi?id=34183> */ > + { > + volatile double x = 1.0 + 1.0 / (double) (1U << 21); /* 2^0 + 2^-21 */ > + volatile double y = x; /* 2^0 + 2^-21 */ > + volatile double z = (double) (1U << 11); /* 2^11 */ > + /* x * y + z with infinite precision: 2^11 + 2^0 + 2^-20 + 2^-42. > + Lies between (2^11 + 2^0 + 2^-20) and (2^11 + 2^0 + 2^-20 + 2^-41). > + By the round-to-even rule, the rounding must round down and produce > + (2^11 + 2^0 + 2^-20). */ > + volatile double expected = 2049.00000095367431640625; > + volatile double result = my_fma (x, y, z); > if (result != expected) > failed_tests |= 16; > } > > >
