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
This commit is contained in:
Jonathan Wakely 2016-01-22 12:47:26 +00:00 committed by Jonathan Wakely
parent d8126ae1cf
commit 350fe2829e
5 changed files with 32 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -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">

View File

@ -132,6 +132,14 @@ 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.
</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:

View File

@ -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