+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
# 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
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">
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>
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
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