diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2016-01-22 12:47:26 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2016-01-22 12:47:26 +0000 |
commit | 350fe2829e2012d0e768602102fac31b474b1d2c (patch) | |
tree | 1cdffa614a66e190d30b4ff13a87c9cae081fb18 /libstdc++-v3 | |
parent | d8126ae1cfd39746a459b077d44d373d0bfe34a0 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | libstdc++-v3/config/os/gnu-linux/os_defines.h | 4 | ||||
-rw-r--r-- | libstdc++-v3/doc/html/manual/internals.html | 7 | ||||
-rw-r--r-- | libstdc++-v3/doc/xml/manual/internals.xml | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/c_global/cmath | 6 |
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 |