[PATCH] Ensure "C++" language linkage for std::abs overloads
Jonathan Wakely
jwakely@redhat.com
Mon Oct 3 11:31:00 GMT 2016
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>.
I'll commit to trunk when testing finishes.
-------------- next part --------------
commit 2dc6b0497b7d0ec0cb298f749419d70a43c2ab70
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Mon Oct 3 12:26:55 2016 +0100
Ensure "C++" language linkage for std::abs overloads
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>.
diff --git a/libstdc++-v3/include/bits/std_abs.h b/libstdc++-v3/include/bits/std_abs.h
index ab0f980..732b81a3 100644
--- a/libstdc++-v3/include/bits/std_abs.h
+++ b/libstdc++-v3/include/bits/std_abs.h
@@ -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
diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2011/linkage.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2011/linkage.cc
index 67c384b..bb56dbf 100644
--- a/libstdc++-v3/testsuite/17_intro/headers/c++2011/linkage.cc
+++ b/libstdc++-v3/testsuite/17_intro/headers/c++2011/linkage.cc
@@ -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
}
More information about the Libstdc++
mailing list