[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