Hello, could you please check if the following mingw-w64 change fixes this
problem?
diff --git a/mingw-w64-crt/misc/fegetexcept.c b/mingw-w64-crt/misc/fegetexcept.c
index ced9f50b0e65..6bbf8d1bde8b 100644
--- a/mingw-w64-crt/misc/fegetexcept.c
+++ b/mingw-w64-crt/misc/fegetexcept.c
@@ -4,5 +4,5 @@
int __cdecl fegetexcept(void)
{
- return __mingw_controlfp(0, 0) & FE_ALL_EXCEPT;
+ return ~__mingw_controlfp(0, 0) & FE_ALL_EXCEPT;
}
On Monday 30 March 2026 22:33:26 Bruno Haible wrote:
> While the <fenv.h> changes in mingw 13.0.0 are working all right,
> in mingw 14.0.0 they added broken implementations of feenableexcept()
> and fedisableexcept(). This leads to Gnulib test suite failures:
>
> $ ./gnulib-tool --create-testdir --dir=../testdir1 \
> fenv-environment fenv-exceptions-state-c23 \
> fenv-exceptions-tracking-c23 fenv-exceptions-trapping \
> fenv-rounding
>
> =>
>
> FAIL: test-fenv-env-2
> =====================
>
> ../../gltests/test-fenv-env-2.c:70: assertion 'fegetexcept () ==
> (supports_trapping ? FE_DIVBYZERO : 0)' failed
> FAIL test-fenv-env-2.exe (exit status: 3)
>
> FAIL: test-fenv-env-3
> =====================
>
> ../../gltests/test-fenv-env-3.c:70: assertion 'fegetexcept () ==
> (supports_trapping ? FE_DIVBYZERO : 0)' failed
> FAIL test-fenv-env-3.exe (exit status: 3)
>
> FAIL: test-fenv-env-4
> =====================
>
> ../../gltests/test-fenv-env-4.c:67: assertion 'fegetexcept () == 0' failed
> FAIL test-fenv-env-4.exe (exit status: 3)
>
> FAIL: test-fenv-env-5
> =====================
>
> ../../gltests/test-fenv-env-5.c:67: assertion 'fegetexcept () == 0' failed
> FAIL test-fenv-env-5.exe (exit status: 3)
>
> FAIL: test-fenv-except-trapping-1
> =================================
>
> ../../gltests/test-fenv-except-trapping-1.c:63: assertion 'fedisableexcept
> (uint_to_exceptions (b)) == uint_to_exceptions (a)' failed
> FAIL test-fenv-except-trapping-1.exe (exit status: 3)
>
>
> This patch adds a workaround: it overrides these broken implementations on
> mingw.
>
>
> 2026-03-30 Bruno Haible <[email protected]>
>
> fenv-exceptions-trapping: Work around mingw 14.0.0 bug.
> * m4/fenv-exceptions-trapping.m4 (gl_FENV_EXCEPTIONS_TRAPPING): Override
> feenableexcept, fedisableexcept also on mingw.
>
> diff --git a/m4/fenv-exceptions-trapping.m4 b/m4/fenv-exceptions-trapping.m4
> index dc388de27b..3679734775 100644
> --- a/m4/fenv-exceptions-trapping.m4
> +++ b/m4/fenv-exceptions-trapping.m4
> @@ -1,5 +1,5 @@
> # fenv-exceptions-trapping.m4
> -# serial 3
> +# serial 4
> dnl Copyright (C) 2023-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,
> @@ -20,6 +20,7 @@ AC_DEFUN_ONCE([gl_FENV_EXCEPTIONS_TRAPPING]
> dnl Fixed through
> dnl
> <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=302949e2940a9da3f6364a1574619e621b7e1e71>.
> dnl Similarly on FreeBSD 12.2/arm, FreeBSD 12.2/arm64, NetBSD 10.0/arm64.
> + dnl On mingw 14.0.0, feenableexcept and fedisableexcept are broken as
> well.
> case "$host" in
> aarch64*-*-linux*)
> AC_CACHE_CHECK([whether feenableexcept works],
> @@ -43,7 +44,8 @@ AC_DEFUN_ONCE([gl_FENV_EXCEPTIONS_TRAPPING]
> *) REPLACE_FEENABLEEXCEPT=1 ;;
> esac
> ;;
> - arm*-*-freebsd* | aarch64*-*-freebsd* | aarch64*-*-netbsd*)
> + arm*-*-freebsd* | aarch64*-*-freebsd* | aarch64*-*-netbsd* | \
> + *-*-mingw* | *-*-windows*)
> REPLACE_FEENABLEEXCEPT=1
> ;;
> esac
>
>
>