* fenv-*: Fix for FreeBSD/powerpc64 and NetBSD/powerpc
@ 2024-01-19 22:10 Bruno Haible
0 siblings, 0 replies; only message in thread
From: Bruno Haible @ 2024-01-19 22:10 UTC (permalink / raw)
To: bug-gnulib
[-- Attachment #1: Type: text/plain, Size: 2084 bytes --]
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 <bruno@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.
[-- Attachment #2: 0001-fenv-Avoid-test-failures-on-FreeBSD-powerpc64-and-Ne.patch --]
[-- Type: text/x-patch, Size: 13740 bytes --]
From 48a7fb40d822bb96d89bf2a1be61b3497b89a267 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@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 <bruno@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 <bruno@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
[-- Attachment #3: 0002-fenv-exceptions-state-c99-Fix-for-FreeBSD-powerpc64-.patch --]
[-- Type: text/x-patch, Size: 3322 bytes --]
From da981cbdda0f58197788f2a1f8a9f2a428e55940 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@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 <bruno@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
[-- Attachment #4: 0003-fenv-exceptions-trapping-Avoid-a-test-failure-on-BSD.patch --]
[-- Type: text/x-patch, Size: 2531 bytes --]
From fe1ea460dd7a2683aa60cf7109f92d1960850f92 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@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 <bruno@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
[-- Attachment #5: 0004-fenv-environment-Fix-for-NetBSD-powerpc.patch --]
[-- Type: text/x-patch, Size: 3434 bytes --]
From 16276ab5c6b6b4154ba1c4577d53e7fe0fecc989 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@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 <bruno@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
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2024-01-19 22:10 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-19 22:10 fenv-*: Fix for FreeBSD/powerpc64 and NetBSD/powerpc Bruno Haible
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).