On Haiku/x86_64, version hrev57363 or newer, I see this test failure: FAIL test-fenv-except-state-2 (exit status: 149)
Looking at it in the debugger, it crashes at an 'fld1' instruction, here: /* Do a harmless floating-point operation (since on some CPUs, floating-point exceptions trigger a trap only at the next floating-point operation). */ a = 1.0; b = a + a; // <==== HERE This means, the function fesetexceptflag() triggers a floating-point exception, although it shouldn't. This hypothesis can be verified by rebuilding with the configure arguments gl_cv_func_fesetexceptflag_works1=no gl_cv_func_fesetexceptflag_works2=no So, this patch fixes it. Likewise on Haiku/i386 (r1beta4 from 2022). 2023-11-05 Bruno Haible <br...@clisp.org> fenv-exceptions-trapping: Avoid test failure on Haiku/i386. * tests/test-fenv-except-trapping-2.c (main): Skip the '4' tests also on Haiku/i386. fenv-exceptions-state: Fix test failure on Haiku/i386 and Haiku/x86_64. * m4/fenv-exceptions-state.m4 (gl_FENV_EXCEPTIONS_STATE): Arrange to override fesetexceptflag() on Haiku. * doc/posix-functions/fesetexceptflag.texi: Mention the Haiku bug.
>From 057858a26b333132ec878f21d60ebfee47053d4d Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Sun, 5 Nov 2023 22:16:38 +0100 Subject: [PATCH 1/2] fenv-exceptions-state: Fix test failure on Haiku/i386 and Haiku/x86_64. * m4/fenv-exceptions-state.m4 (gl_FENV_EXCEPTIONS_STATE): Arrange to override fesetexceptflag() on Haiku. * doc/posix-functions/fesetexceptflag.texi: Mention the Haiku bug. --- ChangeLog | 7 +++++++ doc/posix-functions/fesetexceptflag.texi | 2 +- m4/fenv-exceptions-state.m4 | 7 ++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index dd3661fffd..0f5821ac4d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2023-11-05 Bruno Haible <br...@clisp.org> + + fenv-exceptions-state: Fix test failure on Haiku/i386 and Haiku/x86_64. + * m4/fenv-exceptions-state.m4 (gl_FENV_EXCEPTIONS_STATE): Arrange to + override fesetexceptflag() on Haiku. + * doc/posix-functions/fesetexceptflag.texi: Mention the Haiku bug. + 2023-11-05 Bruno Haible <br...@clisp.org> fenv: Add C++ tests. diff --git a/doc/posix-functions/fesetexceptflag.texi b/doc/posix-functions/fesetexceptflag.texi index 66075be675..3523dbb8f8 100644 --- a/doc/posix-functions/fesetexceptflag.texi +++ b/doc/posix-functions/fesetexceptflag.texi @@ -17,7 +17,7 @@ glibc 2.37/i386, glibc 2.37/x86_64, @c https://sourceware.org/bugzilla/show_bug.cgi?id=30988 glibc 2.37/powerpc, -musl libc, Mac OS X 10.5, mingw. +musl libc, Mac OS X 10.5, mingw, Haiku. @item This function clears too many floating-point exception flags on @c https://sourceware.org/bugzilla/show_bug.cgi?id=30998 diff --git a/m4/fenv-exceptions-state.m4 b/m4/fenv-exceptions-state.m4 index bd443be721..3cd09edd11 100644 --- a/m4/fenv-exceptions-state.m4 +++ b/m4/fenv-exceptions-state.m4 @@ -58,7 +58,8 @@ AC_DEFUN([gl_FENV_EXCEPTIONS_STATE] AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_MATHFUNC([feenableexcept], [int], [(int)], [#include <fenv.h>]) dnl On glibc 2.37 for PowerPC, i386, x86_64, fesetexceptflag may raise - dnl traps. Likewise on Mac OS X 10.5.8 on i386, x86_64 and on mingw. + dnl traps. Likewise on Mac OS X 10.5.8 on i386, x86_64, on mingw, and + dnl on Haiku on i386, x86_64. AC_CACHE_CHECK([whether fesetexceptflag is guaranteed non-trapping], [gl_cv_func_fesetexceptflag_works1], [if test $gl_cv_func_feenableexcept_no_libm = yes \ @@ -129,6 +130,10 @@ AC_DEFUN([gl_FENV_EXCEPTIONS_STATE] [gl_cv_func_fesetexceptflag_works1="guessing no"], [gl_cv_func_fesetexceptflag_works1="guessing yes"]) ;; + # Guess no on Haiku. + haiku*) + gl_cv_func_fesetexceptflag_works1="guessing no" + ;; *) gl_cv_func_fesetexceptflag_works1="guessing yes" ;; esac fi -- 2.34.1
>From e28c0b311c5cc90ef4d441e88ae2e94adc9e3e2e Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Sun, 5 Nov 2023 22:22:35 +0100 Subject: [PATCH 2/2] fenv-exceptions-trapping: Avoid test failure on Haiku/i386. * tests/test-fenv-except-trapping-2.c (main): Skip the '4' tests also on Haiku/i386. --- ChangeLog | 4 ++++ tests/test-fenv-except-trapping-2.c | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0f5821ac4d..0648ef3720 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2023-11-05 Bruno Haible <br...@clisp.org> + fenv-exceptions-trapping: Avoid test failure on Haiku/i386. + * tests/test-fenv-except-trapping-2.c (main): Skip the '4' tests also on + Haiku/i386. + fenv-exceptions-state: Fix test failure on Haiku/i386 and Haiku/x86_64. * m4/fenv-exceptions-state.m4 (gl_FENV_EXCEPTIONS_STATE): Arrange to override fesetexceptflag() on Haiku. diff --git a/tests/test-fenv-except-trapping-2.c b/tests/test-fenv-except-trapping-2.c index c1d5509355..41da5d5b28 100644 --- a/tests/test-fenv-except-trapping-2.c +++ b/tests/test-fenv-except-trapping-2.c @@ -439,7 +439,8 @@ main (int argc, char *argv[]) AIX/powerpc, Solaris/i386, Solaris/x86_64, Cygwin/x86_64, - native Windows/i386, native Windows/x86_64. + native Windows/i386, native Windows/x86_64, + Haiku/i386. Explanation of some of the {i386,x86_64} cases: - Quoting the Intel 64 and IA-32 Architectures Software Developer's Manual: @@ -461,7 +462,8 @@ main (int argc, char *argv[]) || (defined _AIX && defined __powerpc__) \ || (defined __sun && ((defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86))) \ || (defined __CYGWIN__ && (defined __x86_64__ || defined _M_X64)) \ - || (defined _WIN32 && ((defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86))) + || (defined _WIN32 && ((defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86))) \ + || (defined __HAIKU__ && (defined __i386 || defined _M_IX86)) known_failure |= (operation_arg[0] == '4'); #endif /* The '7' and '8' tests, with types 'f' and 'd', do not work reliably -- 2.34.1