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> 2016-01-21 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/69406 PR libstdc++/69406

View File

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

View File

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

View File

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

View File

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