This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]