This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.24-396-gb0216d3
- From: jsm28 at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 23 Nov 2016 00:29:23 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.24-396-gb0216d3
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via b0216d3e4d98a3528bad428c22ff96fcbcc102a4 (commit)
from 510abe7b945ddab6f4497e7c097cff677286bb4d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=b0216d3e4d98a3528bad428c22ff96fcbcc102a4
commit b0216d3e4d98a3528bad428c22ff96fcbcc102a4
Author: Joseph Myers <joseph@codesourcery.com>
Date: Wed Nov 23 00:28:30 2016 +0000
Fix default float_t definition (bug 20855).
The default (top-level) version of bits/mathdef.h defines float_t to
double. It is used on ColdFire, MicroBlaze, Nios II and SH3, all of
which define FLT_EVAL_METHOD to 0, so float_t should be float (and C11
requires a certain correspondence between these typedefs and
FLT_EVAL_METHOD values).
I proposed fixing this default in
<https://sourceware.org/ml/libc-alpha/2015-01/msg00499.html>, with no
objections from architecture maintainers, and this patch makes that
fix. As noted in the NEWS entry added, this might affect the ABIs of
non-glibc libraries (ImageMagick has been mentioned in gcc-patches
discussion of the S/390 case - which is unaffected by this patch), but
as noted in my previous message, affected libraries would have
problems with -mfpmath=sse anyway on 32-bit x86.
A (compilation) testcase is added to verify the required
correspondence of typedefs to FLT_EVAL_METHOD values. This test is
built with -fexcess-precision=standard to avoid any issues with GCC 7
on S/390 providing a more accurate FLT_EVAL_METHOD definition in the
default (no excess precision) mode. (This will also be usable to test
a fix for the recently reported bug about these typedefs on x86_64
-mfpmath=387, as architecture-specific tests can be added that
It is entirely possible that the fixed default makes some
architecture-specific versions of bits/mathdef.h semantically
equivalent to the default version and so no longer required. I don't
intend to investigate that separately from the refactoring I proposed
in <https://sourceware.org/ml/libc-alpha/2016-11/msg00745.html>, which
will create as few header variants as possible for each group of
definitions.
Tested (compilation only) with build-many-glibcs.py.
[BZ #20855]
* bits/mathdef.h (float_t): Define to float.
* math/test-flt-eval-method.c: New file.
* math/Makefile (tests): Add test-flt-eval-method.
(CFLAGS-test-flt-eval-method.c): New variable.
diff --git a/ChangeLog b/ChangeLog
index a475194..57935c6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2016-11-23 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #20855]
+ * bits/mathdef.h (float_t): Define to float.
+ * math/test-flt-eval-method.c: New file.
+ * math/Makefile (tests): Add test-flt-eval-method.
+ (CFLAGS-test-flt-eval-method.c): New variable.
+
2016-11-22 Steve Ellcey <sellcey@caviumnetworks.com>
* sysdeps/unix/sysv/linux/fstatfs64.c: Hide prototypes for fstatfs
diff --git a/NEWS b/NEWS
index b99fc69..6e256ae 100644
--- a/NEWS
+++ b/NEWS
@@ -65,6 +65,11 @@ Version 2.25
- NaN functions: getpayload, getpayloadf, getpayloadl, setpayload,
setpayloadf, setpayloadl.
+* On ColdFire, MicroBlaze, Nios II and SH3, the float_t type is now defined
+ to float instead of double. This does not affect the ABI of any libraries
+ that are part of the GNU C Library, but may affect the ABI of other
+ libraries that use this type in their interfaces.
+
* The functions strfromd, strfromf, and strfroml, from ISO/IEC TS 18661-1:2014,
are added to libc. They convert a floating-point number into string.
diff --git a/bits/mathdef.h b/bits/mathdef.h
index c5d5f8c..d557d08 100644
--- a/bits/mathdef.h
+++ b/bits/mathdef.h
@@ -22,10 +22,10 @@
#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
# define _MATH_H_MATHDEF 1
-/* Normally, there is no long double type and the `float' and `double'
- expressions are evaluated as `double'. */
-typedef double float_t; /* `float' expressions are evaluated as
- `double'. */
+/* Expressions are evaluated with the range and precision of their
+ type. */
+typedef float float_t; /* `float' expressions are evaluated as
+ `float'. */
typedef double double_t; /* `double' expressions are evaluated as
`double'. */
diff --git a/math/Makefile b/math/Makefile
index a5b11e9..fe910ef 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -158,7 +158,7 @@ tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
test-fexcept test-fexcept-traps test-fesetexcept \
test-fesetexcept-traps test-fetestexceptflag test-femode \
test-femode-traps test-iszero-excess-precision \
- test-iseqsig-excess-precision $(tests-static)
+ test-iseqsig-excess-precision test-flt-eval-method $(tests-static)
tests-static = test-fpucw-static test-fpucw-ieee-static \
test-signgam-uchar-static test-signgam-uchar-init-static \
test-signgam-uint-static test-signgam-uint-init-static \
@@ -271,6 +271,7 @@ CFLAGS-test-math-iszero.cc = -std=gnu++11
CFLAGS-test-iszero-excess-precision.c = -fexcess-precision=standard
CFLAGS-test-iseqsig-excess-precision.c = -fexcess-precision=standard
+CFLAGS-test-flt-eval-method.c = -fexcess-precision=standard
# The -lieee module sets the _LIB_VERSION_ switch to IEEE mode
# for error handling in the -lm functions.
diff --git a/math/test-flt-eval-method.c b/math/test-flt-eval-method.c
new file mode 100644
index 0000000..84706a5
--- /dev/null
+++ b/math/test-flt-eval-method.c
@@ -0,0 +1,65 @@
+/* Test evaluation method typedefs match FLT_EVAL_METHOD.
+ Copyright (C) 2016 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
+ <http://www.gnu.org/licenses/>. */
+
+#include <float.h>
+#include <math.h>
+
+#if FLT_EVAL_METHOD == -1
+/* Cannot test. */
+typedef float_t my_float_t;
+typedef double_t my_double_t;
+#elif FLT_EVAL_METHOD == 0 || FLT_EVAL_METHOD == 16
+typedef float my_float_t;
+typedef double my_double_t;
+#elif FLT_EVAL_METHOD == 1
+typedef double my_float_t;
+typedef double my_double_t;
+#elif FLT_EVAL_METHOD == 2
+typedef long double my_float_t;
+typedef long double my_double_t;
+#elif FLT_EVAL_METHOD == 32
+typedef _Float32 my_float_t;
+typedef double my_double_t;
+#elif FLT_EVAL_METHOD == 33
+typedef _Float32x my_float_t;
+typedef _Float32x my_double_t;
+#elif FLT_EVAL_METHOD == 64
+typedef _Float64 my_float_t;
+typedef _Float64 my_double_t;
+#elif FLT_EVAL_METHOD == 65
+typedef _Float64x my_float_t;
+typedef _Float64x my_double_t;
+#elif FLT_EVAL_METHOD == 128
+typedef _Float128 my_float_t;
+typedef _Float128 my_double_t;
+#elif FLT_EVAL_METHOD == 129
+typedef _Float128x my_float_t;
+typedef _Float128x my_double_t;
+#else
+# error "Unknown FLT_EVAL_METHOD"
+#endif
+
+extern float_t test_float_t;
+extern my_float_t test_float_t;
+
+extern double_t test_double_t;
+extern my_double_t test_double_t;
+
+/* This is a compilation test. */
+#define TEST_FUNCTION 0
+#include "../test-skeleton.c"
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 8 +++++
NEWS | 5 +++
bits/mathdef.h | 8 ++--
math/Makefile | 3 +-
math/test-flt-eval-method.c | 65 +++++++++++++++++++++++++++++++++++++++++++
5 files changed, 84 insertions(+), 5 deletions(-)
create mode 100644 math/test-flt-eval-method.c
hooks/post-receive
--
GNU C Library master sources