mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01:00
Two of the architecture bits/fenv.h headers define femode_t if
__GLIBC_USE (IEC_60559_BFP_EXT), instead of the correct condition
__GLIBC_USE (IEC_60559_BFP_EXT_C23) (both were added after commit
0175c9e9be
, but were probably first
developed before it and then not updated to take account of its
changes). This results in failures of the installed headers check for
fenv.h when building with GCC 15 (defaults to -std=gnu23 - we don't
yet have an installed-headers test specifically for C23 mode and don't
yet require a compiler with such a mode for building glibc) together
with a combination of options leaving C23 features enabled, since the
declarations of functions using femode_t use the correct conditions;
see
<https://sourceware.org/pipermail/libc-testresults/2024q4/013163.html>.
Fix the conditionals to get <fenv.h> to work correctly in C23 mode
again.
Tested with build-many-glibcs.py (arc-linux-gnu, arch-linux-gnuhf,
or1k-linux-gnu-hard, or1k-linux-gnu-soft).
78 lines
2 KiB
C
78 lines
2 KiB
C
/* Floating point environment. ARC version.
|
|
Copyright (C) 2020-2024 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with the GNU C Library. If not, see
|
|
<https://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef _FENV_H
|
|
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
|
|
#endif
|
|
|
|
enum
|
|
{
|
|
FE_INVALID =
|
|
# define FE_INVALID (0x01)
|
|
FE_INVALID,
|
|
FE_DIVBYZERO =
|
|
# define FE_DIVBYZERO (0x02)
|
|
FE_DIVBYZERO,
|
|
FE_OVERFLOW =
|
|
# define FE_OVERFLOW (0x04)
|
|
FE_OVERFLOW,
|
|
FE_UNDERFLOW =
|
|
# define FE_UNDERFLOW (0x08)
|
|
FE_UNDERFLOW,
|
|
FE_INEXACT =
|
|
# define FE_INEXACT (0x10)
|
|
FE_INEXACT
|
|
};
|
|
|
|
# define FE_ALL_EXCEPT \
|
|
(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
|
|
|
|
enum
|
|
{
|
|
FE_TOWARDZERO =
|
|
# define FE_TOWARDZERO (0x0)
|
|
FE_TOWARDZERO,
|
|
FE_TONEAREST =
|
|
# define FE_TONEAREST (0x1) /* default */
|
|
FE_TONEAREST,
|
|
FE_UPWARD =
|
|
# define FE_UPWARD (0x2)
|
|
FE_UPWARD,
|
|
FE_DOWNWARD =
|
|
# define FE_DOWNWARD (0x3)
|
|
FE_DOWNWARD
|
|
};
|
|
|
|
typedef unsigned int fexcept_t;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned int __fpcr;
|
|
unsigned int __fpsr;
|
|
} fenv_t;
|
|
|
|
/* If the default argument is used we use this value. */
|
|
#define FE_DFL_ENV ((const fenv_t *) -1)
|
|
|
|
#if __GLIBC_USE (IEC_60559_BFP_EXT_C23)
|
|
/* Type representing floating-point control modes. */
|
|
typedef unsigned int femode_t;
|
|
|
|
/* Default floating-point control modes. */
|
|
# define FE_DFL_MODE ((const femode_t *) -1L)
|
|
#endif
|