aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2016-01-22 12:47:26 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2016-01-22 12:47:26 +0000
commit350fe2829e2012d0e768602102fac31b474b1d2c (patch)
tree1cdffa614a66e190d30b4ff13a87c9cae081fb18 /libstdc++-v3
parentd8126ae1cfd39746a459b077d44d373d0bfe34a0 (diff)
downloadgcc-350fe2829e2012d0e768602102fac31b474b1d2c.zip
gcc-350fe2829e2012d0e768602102fac31b474b1d2c.tar.gz
gcc-350fe2829e2012d0e768602102fac31b474b1d2c.tar.bz2
Allow _GLIBCXX_HAVE_OBSOLETE_ISINF_ISNAN to be overridden
PR libstdc++/69413 * config/os/gnu-linux/os_defines.h: Define _GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC. * include/c_global/cmath (isinf, isnan): Check it. * doc/xml/manual/internals.xml: Document it. * doc/html/*: Regenerate. From-SVN: r232726
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog9
-rw-r--r--libstdc++-v3/config/os/gnu-linux/os_defines.h4
-rw-r--r--libstdc++-v3/doc/html/manual/internals.html7
-rw-r--r--libstdc++-v3/doc/xml/manual/internals.xml8
-rw-r--r--libstdc++-v3/include/c_global/cmath6
5 files changed, 32 insertions, 2 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 3b559c5..77ab6b3 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,12 @@
+2016-01-22 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/69413
+ * config/os/gnu-linux/os_defines.h: Define
+ _GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC.
+ * include/c_global/cmath (isinf, isnan): Check it.
+ * doc/xml/manual/internals.xml: Document it.
+ * doc/html/*: Regenerate.
+
2016-01-21 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/69406
diff --git a/libstdc++-v3/config/os/gnu-linux/os_defines.h b/libstdc++-v3/config/os/gnu-linux/os_defines.h
index 30f32f391..59b0a62 100644
--- a/libstdc++-v3/config/os/gnu-linux/os_defines.h
+++ b/libstdc++-v3/config/os/gnu-linux/os_defines.h
@@ -45,4 +45,8 @@
# undef _GLIBCXX_HAVE_GETS
#endif
+// Glibc 2.23 removed the obsolete isinf and isnan declarations. Check the
+// version dynamically in case it has changed since libstdc++ was configured.
+#define _GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC __GLIBC_PREREQ(2,23)
+
#endif
diff --git a/libstdc++-v3/doc/html/manual/internals.html b/libstdc++-v3/doc/html/manual/internals.html
index 559f8bb..4a521db 100644
--- a/libstdc++-v3/doc/html/manual/internals.html
+++ b/libstdc++-v3/doc/html/manual/internals.html
@@ -88,6 +88,13 @@ the standard.
to an expression that yields 0 if and only if the system headers
are exposing proper support for the related set of functions. If defined,
it must be 0 while bootstrapping the compiler/rebuilding the library.
+ </p><p><code class="code">_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC</code> may be defined
+to an expression that yields 0 if and only if the system headers
+are exposing non-standard <code class="code">isinf(double)</code> and
+<code class="code">isnan(double)</code> functions in the global namespace. Those functions
+should be detected automatically by the <code class="code">configure</code> script when
+libstdc++ is built but if their presence depends on compilation flags or
+other macros the static configuration can be overridden.
</p><p>Finally, you should bracket the entire file in an include-guard, like
this:
</p><pre class="programlisting">
diff --git a/libstdc++-v3/doc/xml/manual/internals.xml b/libstdc++-v3/doc/xml/manual/internals.xml
index 7acec6b..09407f8 100644
--- a/libstdc++-v3/doc/xml/manual/internals.xml
+++ b/libstdc++-v3/doc/xml/manual/internals.xml
@@ -133,6 +133,14 @@ to an expression that yields 0 if and only if the system headers
are exposing proper support for the related set of functions. If defined,
it must be 0 while bootstrapping the compiler/rebuilding the library.
</para>
+ <para><code>_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC</code> may be defined
+to an expression that yields 0 if and only if the system headers
+are exposing non-standard <code>isinf(double)</code> and
+<code>isnan(double)</code> functions in the global namespace. Those functions
+should be detected automatically by the <code>configure</code> script when
+libstdc++ is built but if their presence depends on compilation flags or
+other macros the static configuration can be overridden.
+ </para>
<para>Finally, you should bracket the entire file in an include-guard, like
this:
</para>
diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath
index c4ee3f5..eca712e 100644
--- a/libstdc++-v3/include/c_global/cmath
+++ b/libstdc++-v3/include/c_global/cmath
@@ -610,7 +610,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
isinf(float __x)
{ return __builtin_isinf(__x); }
-#ifdef _GLIBCXX_HAVE_OBSOLETE_ISINF_ISNAN
+#if _GLIBCXX_HAVE_OBSOLETE_ISINF_ISNAN \
+ && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC
using ::isinf;
#else
constexpr bool
@@ -634,7 +635,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
isnan(float __x)
{ return __builtin_isnan(__x); }
-#ifdef _GLIBCXX_HAVE_OBSOLETE_ISINF_ISNAN
+#if _GLIBCXX_HAVE_OBSOLETE_ISINF_ISNAN \
+ && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC
using ::isnan;
#else
constexpr bool