Commit 350fe282 by Jonathan Wakely Committed by Jonathan Wakely

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
parent d8126ae1
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> 2016-01-21 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/69406 PR libstdc++/69406
......
...@@ -45,4 +45,8 @@ ...@@ -45,4 +45,8 @@
# undef _GLIBCXX_HAVE_GETS # undef _GLIBCXX_HAVE_GETS
#endif #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 #endif
...@@ -88,6 +88,13 @@ the standard. ...@@ -88,6 +88,13 @@ the standard.
to an expression that yields 0 if and only if the system headers 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, are exposing proper support for the related set of functions. If defined,
it must be 0 while bootstrapping the compiler/rebuilding the library. 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 </p><p>Finally, you should bracket the entire file in an include-guard, like
this: this:
</p><pre class="programlisting"> </p><pre class="programlisting">
......
...@@ -133,6 +133,14 @@ to an expression that yields 0 if and only if the system headers ...@@ -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, are exposing proper support for the related set of functions. If defined,
it must be 0 while bootstrapping the compiler/rebuilding the library. it must be 0 while bootstrapping the compiler/rebuilding the library.
</para> </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 <para>Finally, you should bracket the entire file in an include-guard, like
this: this:
</para> </para>
......
...@@ -610,7 +610,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -610,7 +610,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
isinf(float __x) isinf(float __x)
{ return __builtin_isinf(__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; using ::isinf;
#else #else
constexpr bool constexpr bool
...@@ -634,7 +635,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -634,7 +635,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
isnan(float __x) isnan(float __x)
{ return __builtin_isnan(__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; using ::isnan;
#else #else
constexpr bool constexpr bool
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment