Ensure "C++" language linkage for std::abs overloads
authorJonathan Wakely <jwakely@redhat.com>
Mon, 3 Oct 2016 11:50:46 +0000 (12:50 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 3 Oct 2016 11:50:46 +0000 (12:50 +0100)
PR libstdc++/77814
* include/bits/std_abs.h: Use "C++" language linkage.
* testsuite/17_intro/headers/c++2011/linkage.cc: Move <complex.h> to
the end. Add <stdalign.h>.

From-SVN: r240710

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/std_abs.h
libstdc++-v3/testsuite/17_intro/headers/c++2011/linkage.cc

index 31dfa65bf56bbee295872a70dca17dc0fea17fbf..8c744356325e1a46a2253aef3faebb0f8f472cf5 100644 (file)
@@ -1,3 +1,10 @@
+2016-10-03  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/77814
+       * include/bits/std_abs.h: Use "C++" language linkage.
+       * testsuite/17_intro/headers/c++2011/linkage.cc: Move <complex.h> to
+       the end. Add <stdalign.h>.
+
 2016-10-03  Ville Voutilainen  <ville.voutilainen@gmail.com>
 
        PR libstdc++/77802
index ab0f980a3a630cdcc5fa57db1ff410723144b6a6..732b81a3700486bf7901aa41789768dfd69a1e9a 100644 (file)
@@ -43,6 +43,8 @@
 
 #undef abs
 
+extern "C++"
+{
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -103,5 +105,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
+}
 
 #endif // _GLIBCXX_BITS_STD_ABS_H
index 67c384b81ffdcdc8f9fe46dcc0492022f13d1c9c..bb56dbf16bb8ebd592f944a0e0552dc16867abcb 100644 (file)
@@ -25,9 +25,7 @@
 extern "C"
 {
 #include <assert.h>
-#ifdef _GLIBCXX_HAVE_COMPLEX_H
-#include <complex.h>
-#endif
+// See below for <complex.h>
 #include <ctype.h>
 #include <errno.h>
 #ifdef _GLIBCXX_HAVE_FENV_H
@@ -43,6 +41,9 @@ extern "C"
 #include <math.h>
 #include <setjmp.h>
 #include <signal.h>
+#if _GLIBCXX_HAVE_STDALIGN_H
+#include <stdalign.h>
+#endif
 #include <stdarg.h>
 #ifdef _GLIBCXX_HAVE_STDBOOL_H
 #include <stdbool.h>
@@ -67,4 +68,10 @@ extern "C"
 #ifdef _GLIBCXX_HAVE_WCTYPE_H
 #include <wctype.h>
 #endif
+
+// Include this last, because it adds extern "C++" and so hides problems in
+// other headers if included first (e.g. PR libstdc++/77814).
+#ifdef _GLIBCXX_HAVE_COMPLEX_H
+#include <complex.h>
+#endif
 }