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;
>    }
> 
> 
> 


Reply via email to