From da981cbdda0f58197788f2a1f8a9f2a428e55940 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 19 Jan 2024 22:34:27 +0100 Subject: [PATCH] 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 + 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 @@ This function clears too many floating-point exception flags on @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 @@ changequote([,])dnl *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.39.5