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.26-544-gd6c064e
- From: fw at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 9 Oct 2017 14:18:53 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.26-544-gd6c064e
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 d6c064e914cba3277d852c9fa27db53f0059ff8c (commit)
from 645ac9aaf89e3311949828546df6334322f48933 (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=d6c064e914cba3277d852c9fa27db53f0059ff8c
commit d6c064e914cba3277d852c9fa27db53f0059ff8c
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Mon Oct 9 14:58:34 2017 +0100
Ensure C99 and C11 interfaces are available for C++ [BZ #21326]
This patch ensures that the C99 and C11 features required by C++ are
defined according to the value of the __cplusplus macro, and not just
because G++ always defines _GNU_SOURCE. This will allow G++ to stop
defining _GNU_SOURCE some day, without causing the C99 and C11
interfaces to disappear for C++ programs.
[BZ #21326]
* include/features.h [__cplusplus >= 201103] (__USE_ISOC99): Define.
[__cplusplus >= 201703] (__USE_ISOCXX17, __USE_ISOC11): Define.
* math/Makefile (test-math-cxx11): New test.
* math/test-math-cxx11.cc: New file.
diff --git a/ChangeLog b/ChangeLog
index da396ff..876f5e6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-10-09 Jonathan Wakely <jwakely@redhat.com>
+
+ [BZ #21326]
+ * include/features.h [__cplusplus >= 201703] (__USE_ISOC11): Define.
+ [__cplusplus >= 201103] (__USE_ISOC99): Define.
+ * math/Makefile (test-math-cxx11): New test.
+ * math/test-math-cxx11.cc: New file.
+
2017-10-08 Christian Brauner <christian.brauner@ubuntu.com>
* login/openpty.c (openpty): Close slave pty file descriptor on error.
diff --git a/include/features.h b/include/features.h
index c063b33..22735ec 100644
--- a/include/features.h
+++ b/include/features.h
@@ -76,6 +76,7 @@
__USE_ISOC11 Define ISO C11 things.
__USE_ISOC99 Define ISO C99 things.
__USE_ISOC95 Define ISO C90 AMD1 (C95) things.
+ __USE_ISOCXX11 Define ISO C++11 things.
__USE_POSIX Define IEEE Std 1003.1 things.
__USE_POSIX2 Define IEEE Std 1003.2 things.
__USE_POSIX199309 Define IEEE Std 1003.1, and .1b things.
@@ -238,13 +239,17 @@
# define __USE_ISOC95 1
#endif
+#ifdef __cplusplus
+/* This is to enable compatibility for ISO C++17. */
+# if __cplusplus >= 201703L
+# define __USE_ISOC11 1
+# endif
/* This is to enable compatibility for ISO C++11.
-
- So far g++ does not provide a macro. Check the temporary macro for
- now, too. */
-#if ((defined __cplusplus && __cplusplus >= 201103L) \
- || defined __GXX_EXPERIMENTAL_CXX0X__)
-# define __USE_ISOCXX11 1
+ Check the temporary macro for now, too. */
+# if __cplusplus >= 201103L || defined __GXX_EXPERIMENTAL_CXX0X__
+# define __USE_ISOCXX11 1
+# define __USE_ISOC99 1
+# endif
#endif
/* If none of the ANSI/POSIX macros are defined, or if _DEFAULT_SOURCE
diff --git a/math/Makefile b/math/Makefile
index 008eeb2..d4f9e6b 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -209,7 +209,7 @@ tests-static += atest-exp atest-sincos atest-exp2
ifneq (,$(CXX))
tests += test-math-isinff test-math-iszero test-math-issignaling \
- test-math-iscanonical
+ test-math-iscanonical test-math-cxx11
endif
ifneq (no,$(PERL))
@@ -354,6 +354,8 @@ CFLAGS-test-signgam-ullong-init.c = -std=c99
CFLAGS-test-signgam-ullong-static.c = -std=c99
CFLAGS-test-signgam-ullong-init-static.c = -std=c99
+CFLAGS-test-math-cxx11.cc = -std=c++11
+
CFLAGS-test-math-isinff.cc = -std=gnu++11
CFLAGS-test-math-iszero.cc = -std=gnu++11
CFLAGS-test-math-issignaling.cc = -std=gnu++11
diff --git a/math/test-math-cxx11.cc b/math/test-math-cxx11.cc
new file mode 100644
index 0000000..8417cdd
--- /dev/null
+++ b/math/test-math-cxx11.cc
@@ -0,0 +1,160 @@
+/* Test C99 math functions are available in C++11 without _GNU_SOURCE.
+ Copyright (C) 2017 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/>. */
+
+#undef _GNU_SOURCE
+#undef _DEFAULT_SOURCE
+#undef _XOPEN_SOURCE
+#undef _POSIX_SOURCE
+#undef _POSIX_C_SOURCE
+// __STRICT_ANSI__ gets defined by -std=c++11 in CFLAGS
+#include <math.h>
+#include <stdio.h>
+
+static int
+do_test (void)
+{
+#ifdef _GNU_SOURCE
+ printf ("FAIL: _GNU_SOURCE is defined.\n");
+ return 1;
+#endif
+
+#if __cplusplus >= 201103L
+ /* Verify that C11 math functions and types are defined for C++11,
+ without _GNU_SOURCE being defined. [BZ #21326] */
+ (void) FP_INFINITE;
+ (void) FP_NAN;
+ (void) FP_NORMAL;
+ (void) FP_SUBNORMAL;
+ (void) FP_ZERO;
+ double_t d = 1.0;
+ (void) d;
+ float_t f = 1.0f;
+ (void) f;
+ (void) acosh;
+ (void) acoshf;
+ (void) acoshl;
+ (void) asinh;
+ (void) asinhf;
+ (void) asinhl;
+ (void) atanh;
+ (void) atanhf;
+ (void) atanhl;
+ (void) cbrt;
+ (void) cbrtf;
+ (void) cbrtl;
+ (void) copysign;
+ (void) copysignf;
+ (void) copysignl;
+ (void) erf;
+ (void) erff;
+ (void) erfl;
+ (void) erfc;
+ (void) erfcf;
+ (void) erfcl;
+ (void) exp2;
+ (void) exp2f;
+ (void) exp2l;
+ (void) expm1;
+ (void) expm1f;
+ (void) expm1l;
+ (void) fdim;
+ (void) fdimf;
+ (void) fdiml;
+ (void) fma;
+ (void) fmaf;
+ (void) fmal;
+ (void) fmax;
+ (void) fmaxf;
+ (void) fmaxl;
+ (void) fmin;
+ (void) fminf;
+ (void) fminl;
+ (void) hypot;
+ (void) hypotf;
+ (void) hypotl;
+ (void) ilogb;
+ (void) ilogbf;
+ (void) ilogbl;
+ (void) lgamma;
+ (void) lgammaf;
+ (void) lgammal;
+ (void) llrint;
+ (void) llrintf;
+ (void) llrintl;
+ (void) llround;
+ (void) llroundf;
+ (void) llroundl;
+ (void) log1p;
+ (void) log1pf;
+ (void) log1pl;
+ (void) log2;
+ (void) log2f;
+ (void) log2l;
+ (void) logb;
+ (void) logbf;
+ (void) logbl;
+ (void) lrint;
+ (void) lrintf;
+ (void) lrintl;
+ (void) lround;
+ (void) lroundf;
+ (void) lroundl;
+ (void) nan;
+ (void) nanf;
+ (void) nanl;
+ (void) nearbyint;
+ (void) nearbyintf;
+ (void) nearbyintl;
+ (void) nextafter;
+ (void) nextafterf;
+ (void) nextafterl;
+ (void) nexttoward;
+ (void) nexttowardf;
+ (void) nexttowardl;
+ (void) remainder;
+ (void) remainderf;
+ (void) remainderl;
+ (void) remquo;
+ (void) remquof;
+ (void) remquol;
+ (void) rint;
+ (void) rintf;
+ (void) rintl;
+ (void) round;
+ (void) roundf;
+ (void) roundl;
+ (void) scalbln;
+ (void) scalblnf;
+ (void) scalblnl;
+ (void) scalbn;
+ (void) scalbnf;
+ (void) scalbnl;
+ (void) tgamma;
+ (void) tgammaf;
+ (void) tgammal;
+ (void) trunc;
+ (void) truncf;
+ (void) truncl;
+ printf ("PASS: C11 math functions present in C++11 without _GNU_SOURCE.\n");
+#else
+ printf ("UNSUPPORTED: C++11 not enabled.\n");
+#endif
+ return 0;
+}
+
+#include <support/test-driver.c>
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 8 +++
include/features.h | 17 +++--
math/Makefile | 4 +-
math/test-math-cxx11.cc | 160 +++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 182 insertions(+), 7 deletions(-)
create mode 100644 math/test-math-cxx11.cc
hooks/post-receive
--
GNU C Library master sources