On FreeBSD 14.0/powerpc64 and NetBSD 9.3/powerpc I'm seeing many test failures of the fenv-* modules:
* FreeBSD 14.0/powerpc64 and FreeBSD 14.0/powerpc64le: FAIL: test-fenv-env-2 FAIL: test-fenv-env-3 FAIL: test-fenv-env-4 FAIL: test-fenv-env-5 FAIL: test-fenv-except-state-2 FAIL: test-fenv-except-tracking-4 FAIL: test-fenv-except-tracking-1 FAIL: test-fenv-except-trapping-2.sh * NetBSD 9.3/powerpc: FAIL: test-fenv-env-2 FAIL: test-fenv-env-3 FAIL: test-fenv-env-4 FAIL: test-fenv-env-5 FAIL: test-fenv-env-6.sh FAIL: test-fenv-except-state-2 FAIL: test-fenv-except-tracking-4 FAIL: test-fenv-except-tracking-1 FAIL: test-fenv-except-trapping-2.sh This series of patches fixes them. 2024-01-19 Bruno Haible <br...@clisp.org> fenv-environment: Fix for NetBSD/powerpc. * m4/fenv-environment.m4 (gl_FENV_ENVIRONMENT): For feupdateenv, use the same configure test on NetBSD/powerpc as on glibc/hppa. * doc/posix-functions/feupdateenv.texi: Mention the NetBSD/powerpc bug. fenv-exceptions-trapping: Avoid a test failure on *BSD/powerpc*. * tests/test-fenv-except-trapping-2.c (main): Skip the '4' tests also on FreeBSD/powerpc* and NetBSD/powerpc*. fenv-exceptions-state-c99: Fix for FreeBSD/powerpc64 and NetBSD/powerpc. * m4/fenv-exceptions-state.m4 (gl_FENV_EXCEPTIONS_STATE): On FreeBSD/powerpc64 and NetBSD/powerpc, set REPLACE_FESETEXCEPTFLAG. * doc/posix-functions/fesetexceptflag.texi: Mention the FreeBSD and NetBSD bug. fenv-*: Avoid test failures on FreeBSD/powerpc64 and NetBSD/powerpc. On these platforms, FE_ALL_EXCEPT contains additional bits. * tests/test-fenv-except-tracking-1.c (FE_VXSOFT, FE_VXZDZ): Define fallbacks. (main): Allow fetestexcept(FE_ALL_EXCEPT) to contain FE_VXSOFT or FE_VXZDZ in addition to FE_INVALID. * tests/test-fenv-except-tracking-4.c (FE_VXSOFT): Define fallback. (main): Allow fetestexcept(FE_ALL_EXCEPT) to contain FE_VXSOFT in addition to FE_INVALID. * tests/test-fenv-env-2.c: Likewise. * tests/test-fenv-env-3.c: Likewise. * tests/test-fenv-env-4.c: Likewise. * tests/test-fenv-env-5.c: Likewise.
>From 48a7fb40d822bb96d89bf2a1be61b3497b89a267 Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Fri, 19 Jan 2024 22:04:33 +0100 Subject: [PATCH 1/4] fenv-*: Avoid test failures on FreeBSD/powerpc64 and NetBSD/powerpc. On these platforms, FE_ALL_EXCEPT contains additional bits. * tests/test-fenv-except-tracking-1.c (FE_VXSOFT, FE_VXZDZ): Define fallbacks. (main): Allow fetestexcept(FE_ALL_EXCEPT) to contain FE_VXSOFT or FE_VXZDZ in addition to FE_INVALID. * tests/test-fenv-except-tracking-4.c (FE_VXSOFT): Define fallback. (main): Allow fetestexcept(FE_ALL_EXCEPT) to contain FE_VXSOFT in addition to FE_INVALID. * tests/test-fenv-env-2.c: Likewise. * tests/test-fenv-env-3.c: Likewise. * tests/test-fenv-env-4.c: Likewise. * tests/test-fenv-env-5.c: Likewise. --- ChangeLog | 16 ++++++++++++++++ tests/test-fenv-env-2.c | 15 +++++++++++++-- tests/test-fenv-env-3.c | 25 +++++++++++++++++++++---- tests/test-fenv-env-4.c | 10 +++++++++- tests/test-fenv-env-5.c | 15 +++++++++++++-- tests/test-fenv-except-tracking-1.c | 22 +++++++++++++++------- tests/test-fenv-except-tracking-4.c | 7 ++++++- 7 files changed, 93 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 71516a86b8..6901b278f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2024-01-19 Bruno Haible <br...@clisp.org> + + fenv-*: Avoid test failures on FreeBSD/powerpc64 and NetBSD/powerpc. + On these platforms, FE_ALL_EXCEPT contains additional bits. + * tests/test-fenv-except-tracking-1.c (FE_VXSOFT, FE_VXZDZ): Define + fallbacks. + (main): Allow fetestexcept(FE_ALL_EXCEPT) to contain FE_VXSOFT or + FE_VXZDZ in addition to FE_INVALID. + * tests/test-fenv-except-tracking-4.c (FE_VXSOFT): Define fallback. + (main): Allow fetestexcept(FE_ALL_EXCEPT) to contain FE_VXSOFT in + addition to FE_INVALID. + * tests/test-fenv-env-2.c: Likewise. + * tests/test-fenv-env-3.c: Likewise. + * tests/test-fenv-env-4.c: Likewise. + * tests/test-fenv-env-5.c: Likewise. + 2024-01-19 Bruno Haible <br...@clisp.org> fenv-*: Fix test failures on NetBSD 9.3/arm64. diff --git a/tests/test-fenv-env-2.c b/tests/test-fenv-env-2.c index 9ea5b096bb..f1cc482608 100644 --- a/tests/test-fenv-env-2.c +++ b/tests/test-fenv-env-2.c @@ -25,6 +25,11 @@ /* Test the combination of fegetenv() with fesetenv(). */ +/* On *BSD/powerpc systems, raising FE_INVALID also sets FE_VXSOFT. */ +#ifndef FE_VXSOFT +# define FE_VXSOFT 0 +#endif + int main () { @@ -49,7 +54,10 @@ main () ASSERT (fegetenv (&env2) == 0); /* Check that the exception flags are unmodified. */ - ASSERT (fetestexcept (FE_ALL_EXCEPT) == (supports_tracking ? FE_INVALID | FE_OVERFLOW | FE_INEXACT : 0)); + if (supports_tracking) + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INVALID | FE_OVERFLOW | FE_INEXACT)); + else + ASSERT (fetestexcept (FE_ALL_EXCEPT) == 0); /* Check that the exception trap bits are unmodified. */ ASSERT (fegetexcept () == (supports_trapping ? FE_DIVBYZERO : 0)); @@ -79,7 +87,10 @@ main () /* Check that the rounding direction has been restored. */ ASSERT (fegetround () == FE_UPWARD); /* Check that the exception flags have been restored. */ - ASSERT (fetestexcept (FE_ALL_EXCEPT) == (supports_tracking ? FE_INVALID | FE_OVERFLOW | FE_INEXACT : 0)); + if (supports_tracking) + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INVALID | FE_OVERFLOW | FE_INEXACT)); + else + ASSERT (fetestexcept (FE_ALL_EXCEPT) == 0); /* Check that the exception trap bits have been restored. */ ASSERT (fegetexcept () == (supports_trapping ? FE_DIVBYZERO : 0)); diff --git a/tests/test-fenv-env-3.c b/tests/test-fenv-env-3.c index 61e7b4a03e..7dbe93b465 100644 --- a/tests/test-fenv-env-3.c +++ b/tests/test-fenv-env-3.c @@ -25,6 +25,11 @@ /* Test the combination of fegetenv() with feupdateenv(). */ +/* On *BSD/powerpc systems, raising FE_INVALID also sets FE_VXSOFT. */ +#ifndef FE_VXSOFT +# define FE_VXSOFT 0 +#endif + int main () { @@ -49,7 +54,10 @@ main () ASSERT (fegetenv (&env2) == 0); /* Check that the exception flags are unmodified. */ - ASSERT (fetestexcept (FE_ALL_EXCEPT) == (supports_tracking ? FE_INVALID | FE_OVERFLOW | FE_INEXACT : 0)); + if (supports_tracking) + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INVALID | FE_OVERFLOW | FE_INEXACT)); + else + ASSERT (fetestexcept (FE_ALL_EXCEPT) == 0); /* Check that the exception trap bits are unmodified. */ ASSERT (fegetexcept () == (supports_trapping ? FE_DIVBYZERO : 0)); @@ -61,7 +69,10 @@ main () /* Check that the exception flags are the union of the saved and of the current exception flags. (The saved exception flags happen to be none in this case.) */ - ASSERT (fetestexcept (FE_ALL_EXCEPT) == (supports_tracking ? FE_INVALID | FE_OVERFLOW | FE_INEXACT : 0)); + if (supports_tracking) + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INVALID | FE_OVERFLOW | FE_INEXACT)); + else + ASSERT (fetestexcept (FE_ALL_EXCEPT) == 0); /* Check that the exception trap bits have been restored. */ ASSERT (fegetexcept () == 0); @@ -82,7 +93,10 @@ main () ASSERT (fegetround () == FE_UPWARD); /* Check that the exception flags are the union of the saved and of the current exception flags. */ - ASSERT (fetestexcept (FE_ALL_EXCEPT) == (supports_tracking ? FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT : 0)); + if (supports_tracking) + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)); + else + ASSERT (fetestexcept (FE_ALL_EXCEPT) == 0); /* Check that the exception trap bits have been restored. */ ASSERT (fegetexcept () == (supports_trapping ? FE_DIVBYZERO : 0)); @@ -95,7 +109,10 @@ main () /* Check that the rounding direction has been restored, whereas the exception flags are unmodified. */ ASSERT (fegetround () == FE_TONEAREST); - ASSERT (fetestexcept (FE_ALL_EXCEPT) == (supports_tracking ? FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT : 0)); + if (supports_tracking) + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)); + else + ASSERT (fetestexcept (FE_ALL_EXCEPT) == 0); /* Enable trapping on FE_INVALID. */ feclearexcept (FE_INVALID); diff --git a/tests/test-fenv-env-4.c b/tests/test-fenv-env-4.c index 13bd5adb95..af75fc0215 100644 --- a/tests/test-fenv-env-4.c +++ b/tests/test-fenv-env-4.c @@ -25,6 +25,11 @@ /* Test the combination of feholdexcept() with fesetenv(). */ +/* On *BSD/powerpc systems, raising FE_INVALID also sets FE_VXSOFT. */ +#ifndef FE_VXSOFT +# define FE_VXSOFT 0 +#endif + int main () { @@ -79,7 +84,10 @@ main () /* Check that the rounding direction has been restored. */ ASSERT (fegetround () == FE_UPWARD); /* Check that the exception flags have been restored. */ - ASSERT (fetestexcept (FE_ALL_EXCEPT) == (supports_tracking ? FE_INVALID | FE_OVERFLOW | FE_INEXACT : 0)); + if (supports_tracking) + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INVALID | FE_OVERFLOW | FE_INEXACT)); + else + ASSERT (fetestexcept (FE_ALL_EXCEPT) == 0); /* Check that the exception trap bits have been restored. */ ASSERT (fegetexcept () == (supports_trapping ? FE_DIVBYZERO : 0)); diff --git a/tests/test-fenv-env-5.c b/tests/test-fenv-env-5.c index 82f7c0e1f9..4c6980e254 100644 --- a/tests/test-fenv-env-5.c +++ b/tests/test-fenv-env-5.c @@ -25,6 +25,11 @@ /* Test the combination of feholdexcept() with feupdateenv(). */ +/* On *BSD/powerpc systems, raising FE_INVALID also sets FE_VXSOFT. */ +#ifndef FE_VXSOFT +# define FE_VXSOFT 0 +#endif + int main () { @@ -82,7 +87,10 @@ main () ASSERT (fegetround () == FE_UPWARD); /* Check that the exception flags are the union of the saved and of the current exception flags. */ - ASSERT (fetestexcept (FE_ALL_EXCEPT) == (supports_tracking ? FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT : 0)); + if (supports_tracking) + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)); + else + ASSERT (fetestexcept (FE_ALL_EXCEPT) == 0); /* Check that the exception trap bits have been restored. */ ASSERT (fegetexcept () == (supports_trapping ? FE_DIVBYZERO : 0)); @@ -95,7 +103,10 @@ main () /* Check that the rounding direction has been restored, whereas the exception flags are unmodified. */ ASSERT (fegetround () == FE_TONEAREST); - ASSERT (fetestexcept (FE_ALL_EXCEPT) == (supports_tracking ? FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT : 0)); + if (supports_tracking) + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)); + else + ASSERT (fetestexcept (FE_ALL_EXCEPT) == 0); /* Enable trapping on FE_INVALID. */ feclearexcept (FE_INVALID); diff --git a/tests/test-fenv-except-tracking-1.c b/tests/test-fenv-except-tracking-1.c index f795e2b278..70bdda563a 100644 --- a/tests/test-fenv-except-tracking-1.c +++ b/tests/test-fenv-except-tracking-1.c @@ -23,6 +23,14 @@ #include "macros.h" +/* On *BSD/powerpc systems, raising FE_INVALID also sets FE_VXSOFT. */ +#ifndef FE_VXSOFT +# define FE_VXSOFT 0 +#endif +#ifndef FE_VXZDZ +# define FE_VXZDZ 0 +#endif + static volatile double a, b, c; int @@ -37,7 +45,7 @@ main () ASSERT (/* with the libc's feraiseexcept(): */ fetestexcept (FE_ALL_EXCEPT) == FE_ALL_EXCEPT || /* with gnulib's feraiseexcept(): */ - fetestexcept (FE_ALL_EXCEPT) + (fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)); ASSERT (fetestexcept (FE_INVALID) == FE_INVALID); ASSERT (fetestexcept (FE_DIVBYZERO) == FE_DIVBYZERO); @@ -58,7 +66,7 @@ main () /* Test setting just one exception flag: FE_INVALID. */ ASSERT (feclearexcept (FE_ALL_EXCEPT) == 0); ASSERT (feraiseexcept (FE_INVALID) == 0); - ASSERT (fetestexcept (FE_ALL_EXCEPT) == FE_INVALID); + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == FE_INVALID); ASSERT (fetestexcept (FE_INVALID) == FE_INVALID); ASSERT (fetestexcept (FE_DIVBYZERO) == 0); ASSERT (fetestexcept (FE_OVERFLOW) == 0); @@ -128,7 +136,7 @@ main () ASSERT (/* with the libc's feraiseexcept(): */ fetestexcept (FE_ALL_EXCEPT) == (FE_ALL_EXCEPT & ~FE_DIVBYZERO) || /* with gnulib's feraiseexcept(): */ - fetestexcept (FE_ALL_EXCEPT) + (fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)); ASSERT (fetestexcept (FE_INVALID) == FE_INVALID); ASSERT (fetestexcept (FE_DIVBYZERO) == 0); @@ -142,7 +150,7 @@ main () ASSERT (/* with the libc's feraiseexcept(): */ fetestexcept (FE_ALL_EXCEPT) == (FE_ALL_EXCEPT & ~FE_OVERFLOW) || /* with gnulib's feraiseexcept(): */ - fetestexcept (FE_ALL_EXCEPT) + (fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_UNDERFLOW)); ASSERT (fetestexcept (FE_INVALID) == FE_INVALID); ASSERT (fetestexcept (FE_DIVBYZERO) == FE_DIVBYZERO); @@ -156,7 +164,7 @@ main () ASSERT (/* with the libc's feraiseexcept(): */ fetestexcept (FE_ALL_EXCEPT) == (FE_ALL_EXCEPT & ~FE_UNDERFLOW) || /* with gnulib's feraiseexcept(): */ - fetestexcept (FE_ALL_EXCEPT) + (fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW)); ASSERT (fetestexcept (FE_INVALID) == FE_INVALID); ASSERT (fetestexcept (FE_DIVBYZERO) == FE_DIVBYZERO); @@ -170,7 +178,7 @@ main () ASSERT (/* with the libc's feraiseexcept(): */ fetestexcept (FE_ALL_EXCEPT) == (FE_ALL_EXCEPT & ~FE_INEXACT) || /* with gnulib's feraiseexcept(): */ - fetestexcept (FE_ALL_EXCEPT) + (fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == (FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)); ASSERT (fetestexcept (FE_INVALID) == FE_INVALID); ASSERT (fetestexcept (FE_DIVBYZERO) == FE_DIVBYZERO); @@ -183,7 +191,7 @@ main () /* Test the effects of an operation that produces FE_INVALID. */ ASSERT (feclearexcept (FE_ALL_EXCEPT) == 0); a = 0; b = 0; c = a / b; - ASSERT (fetestexcept (FE_ALL_EXCEPT) == FE_INVALID); + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXZDZ) == FE_INVALID); ASSERT (fetestexcept (FE_INVALID) == FE_INVALID); ASSERT (fetestexcept (FE_DIVBYZERO) == 0); ASSERT (fetestexcept (FE_OVERFLOW) == 0); diff --git a/tests/test-fenv-except-tracking-4.c b/tests/test-fenv-except-tracking-4.c index 9f8859dac9..060d036b07 100644 --- a/tests/test-fenv-except-tracking-4.c +++ b/tests/test-fenv-except-tracking-4.c @@ -25,6 +25,11 @@ /* Check that fesetexcept() works. */ +/* On *BSD/powerpc systems, raising FE_INVALID also sets FE_VXSOFT. */ +#ifndef FE_VXSOFT +# define FE_VXSOFT 0 +#endif + int main () { @@ -42,7 +47,7 @@ main () /* Test setting just one exception flag: FE_INVALID. */ ASSERT (feclearexcept (FE_ALL_EXCEPT) == 0); ASSERT (fesetexcept (FE_INVALID) == 0); - ASSERT (fetestexcept (FE_ALL_EXCEPT) == FE_INVALID); + ASSERT ((fetestexcept (FE_ALL_EXCEPT) & ~FE_VXSOFT) == FE_INVALID); ASSERT (fetestexcept (FE_INVALID) == FE_INVALID); ASSERT (fetestexcept (FE_DIVBYZERO) == 0); ASSERT (fetestexcept (FE_OVERFLOW) == 0); -- 2.34.1
>From da981cbdda0f58197788f2a1f8a9f2a428e55940 Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Fri, 19 Jan 2024 22:34:27 +0100 Subject: [PATCH 2/4] fenv-exceptions-state-c99: Fix for FreeBSD/powerpc64 and NetBSD/powerpc. * m4/fenv-exceptions-state.m4 (gl_FENV_EXCEPTIONS_STATE): On FreeBSD/powerpc64 and NetBSD/powerpc, set REPLACE_FESETEXCEPTFLAG. * doc/posix-functions/fesetexceptflag.texi: Mention the FreeBSD and NetBSD bug. --- ChangeLog | 6 ++++++ doc/posix-functions/fesetexceptflag.texi | 3 +++ m4/fenv-exceptions-state.m4 | 15 +++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6901b278f1..04ecfec904 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2024-01-19 Bruno Haible <br...@clisp.org> + fenv-exceptions-state-c99: Fix for FreeBSD/powerpc64 and NetBSD/powerpc. + * m4/fenv-exceptions-state.m4 (gl_FENV_EXCEPTIONS_STATE): On + FreeBSD/powerpc64 and NetBSD/powerpc, set REPLACE_FESETEXCEPTFLAG. + * doc/posix-functions/fesetexceptflag.texi: Mention the FreeBSD and + NetBSD bug. + fenv-*: Avoid test failures on FreeBSD/powerpc64 and NetBSD/powerpc. On these platforms, FE_ALL_EXCEPT contains additional bits. * tests/test-fenv-except-tracking-1.c (FE_VXSOFT, FE_VXZDZ): Define diff --git a/doc/posix-functions/fesetexceptflag.texi b/doc/posix-functions/fesetexceptflag.texi index 7a3971a3a5..065877e9ce 100644 --- a/doc/posix-functions/fesetexceptflag.texi +++ b/doc/posix-functions/fesetexceptflag.texi @@ -23,6 +23,9 @@ @c https://sourceware.org/bugzilla/show_bug.cgi?id=30998 glibc 2.37/alpha. @item +This function loses the @code{FE_INVALID} flag on +FreeBSD 14.0/powerpc64, NetBSD 9.3/powerpc. +@item This function is also buggy on @c Without the override, the unit test test-fenv-except-state-1 fails. AIX 7.3.1. diff --git a/m4/fenv-exceptions-state.m4 b/m4/fenv-exceptions-state.m4 index 0254518496..7333daf53c 100644 --- a/m4/fenv-exceptions-state.m4 +++ b/m4/fenv-exceptions-state.m4 @@ -1,4 +1,4 @@ -# fenv-exceptions-state.m4 serial 3 +# fenv-exceptions-state.m4 serial 4 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -195,10 +195,21 @@ AC_DEFUN([gl_FENV_EXCEPTIONS_STATE] *yes) ;; *) REPLACE_FESETEXCEPTFLAG=1 ;; esac + dnl Additionally, on FreeBSD/powerpc64 and NetBSD/powerpc, the unit test + dnl test-fenv-except-state-2 fails if we don't override fesetexceptflag. + dnl The function fesetexceptflag apparently fails to restore the + dnl FE_INVALID flag. + case "$host" in + powerpc*-*-freebsd* | powerpc*-*-netbsd*) + REPLACE_FESETEXCEPTFLAG=1 + ;; + esac dnl Additionally, on AIX, the unit test test-fenv-except-state-1 fails dnl if we don't override fesetexceptflag. case "$host" in - powerpc*-*-aix*) REPLACE_FESETEXCEPTFLAG=1 ;; + powerpc*-*-aix*) + REPLACE_FESETEXCEPTFLAG=1 + ;; esac dnl Additionally, on MSVC, we want the bits in the saved state to be dnl identified by the FE_* macros, so that the fetestexceptflag function -- 2.34.1
>From fe1ea460dd7a2683aa60cf7109f92d1960850f92 Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Fri, 19 Jan 2024 22:43:55 +0100 Subject: [PATCH 3/4] fenv-exceptions-trapping: Avoid a test failure on *BSD/powerpc*. * tests/test-fenv-except-trapping-2.c (main): Skip the '4' tests also on FreeBSD/powerpc* and NetBSD/powerpc*. --- ChangeLog | 4 ++++ tests/test-fenv-except-trapping-2.c | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 04ecfec904..7cef961362 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2024-01-19 Bruno Haible <br...@clisp.org> + fenv-exceptions-trapping: Avoid a test failure on *BSD/powerpc*. + * tests/test-fenv-except-trapping-2.c (main): Skip the '4' tests also on + FreeBSD/powerpc* and NetBSD/powerpc*. + fenv-exceptions-state-c99: Fix for FreeBSD/powerpc64 and NetBSD/powerpc. * m4/fenv-exceptions-state.m4 (gl_FENV_EXCEPTIONS_STATE): On FreeBSD/powerpc64 and NetBSD/powerpc, set REPLACE_FESETEXCEPTFLAG. diff --git a/tests/test-fenv-except-trapping-2.c b/tests/test-fenv-except-trapping-2.c index 57b9341f46..257107d2ee 100644 --- a/tests/test-fenv-except-trapping-2.c +++ b/tests/test-fenv-except-trapping-2.c @@ -433,8 +433,8 @@ main (int argc, char *argv[]) GNU/kFreeBSD/i386, GNU/kFreeBSD/x86_64, musl libc/i386, musl libc/powerpc64le, macOS/i386, macOS/x86_64, macOS/arm64, - FreeBSD/i386, FreeBSD/x86_64, - NetBSD/i386, NetBSD/x86_64, + FreeBSD/i386, FreeBSD/x86_64, FreeBSD/powerpc64, + NetBSD/i386, NetBSD/x86_64, NetBSD/powerpc, OpenBSD/i386, OpenBSD/x86_64, OpenBSD/mips64, Minix/i386, AIX/powerpc, @@ -460,6 +460,7 @@ main (int argc, char *argv[]) || (defined MUSL_LIBC && ((defined __i386 || defined _M_IX86) || defined __powerpc__)) \ || ((defined __APPLE__ && defined __MACH__) && ((defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86) || defined __aarch64__)) \ || ((defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__) && ((defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86))) \ + || ((defined __FreeBSD__ || defined __NetBSD__) && defined __powerpc__) \ || (defined __OpenBSD__ && defined __mips64) \ || (defined __minix && (defined __i386 || defined _M_IX86)) \ || (defined _AIX && defined __powerpc__) \ -- 2.34.1
>From 16276ab5c6b6b4154ba1c4577d53e7fe0fecc989 Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Fri, 19 Jan 2024 22:58:43 +0100 Subject: [PATCH 4/4] fenv-environment: Fix for NetBSD/powerpc. * m4/fenv-environment.m4 (gl_FENV_ENVIRONMENT): For feupdateenv, use the same configure test on NetBSD/powerpc as on glibc/hppa. * doc/posix-functions/feupdateenv.texi: Mention the NetBSD/powerpc bug. --- ChangeLog | 5 +++++ doc/posix-functions/feupdateenv.texi | 3 ++- m4/fenv-environment.m4 | 13 +++++++------ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7cef961362..d8d2a13d9e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2024-01-19 Bruno Haible <br...@clisp.org> + fenv-environment: Fix for NetBSD/powerpc. + * m4/fenv-environment.m4 (gl_FENV_ENVIRONMENT): For feupdateenv, use + the same configure test on NetBSD/powerpc as on glibc/hppa. + * doc/posix-functions/feupdateenv.texi: Mention the NetBSD/powerpc bug. + fenv-exceptions-trapping: Avoid a test failure on *BSD/powerpc*. * tests/test-fenv-except-trapping-2.c (main): Skip the '4' tests also on FreeBSD/powerpc* and NetBSD/powerpc*. diff --git a/doc/posix-functions/feupdateenv.texi b/doc/posix-functions/feupdateenv.texi index bb844ec2f1..4fd76416a1 100644 --- a/doc/posix-functions/feupdateenv.texi +++ b/doc/posix-functions/feupdateenv.texi @@ -34,7 +34,8 @@ This function does not trigger traps on @c https://sourceware.org/bugzilla/show_bug.cgi?id=31023 glibc 2.37/hppa, -musl libc/s390x. +musl libc/s390x, +NetBSD 9.3/powerpc. @item This function may fail on some platforms: MSVC 14. diff --git a/m4/fenv-environment.m4 b/m4/fenv-environment.m4 index 8d3911e6e4..bf4788dc9b 100644 --- a/m4/fenv-environment.m4 +++ b/m4/fenv-environment.m4 @@ -1,4 +1,4 @@ -# fenv-environment.m4 serial 2 +# fenv-environment.m4 serial 3 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -304,9 +304,10 @@ AC_DEFUN([gl_FENV_ENVIRONMENT] dnl <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=a8c79c4088e8c04e4297936efa0dee6c8e6e974d>) dnl and on Mac OS X 10.5/{i386,x86_64} (where it forgets about the currently dnl set floating-point exception flags) - dnl and on musl libc/s390x (where it does not trigger traps) - dnl on musl libc/{i386,x86_64} and AIX and Solaris and mingw 10 (where it - dnl fails to restore the exception trap bits), + dnl and on musl libc/s390x and NetBSD 9.3/powerpc (where it does not trigger + dnl traps) + dnl and on musl libc/{i386,x86_64} and AIX and Solaris and mingw 10 (where + dnl it fails to restore the exception trap bits), dnl and on FreeBSD 12.2/arm64 (see dnl <https://cgit.freebsd.org/src/commit/?id=34cc08e336987a8ebc316595e3f552a4c09f1fd4>). dnl On MSVC 14 it may even fail. @@ -329,8 +330,8 @@ AC_DEFUN([gl_FENV_ENVIRONMENT] [gl_cv_func_feupdateenv_works="guessing no"]) LIBS="$saved_LIBS" ;; - # Guess no on glibc/hppa. - hppa*-*-*-gnu*) + # Guess no on glibc/hppa and NetBSD/powerpc64. + hppa*-*-*-gnu* | powerpc*-*-netbsd*) saved_LIBS="$LIBS" LIBS="$LIBS $FENV_ENVIRONMENT_LIBM" AC_RUN_IFELSE( -- 2.34.1