[v3] __once_proxy(void) workaround for implicit extern "C" systems

Jonathan Wakely jwakely.gcc@gmail.com
Mon Nov 7 07:55:00 GMT 2011


This is necessary for systems that treat all system headers as
implicitly extern "C" (at least AIX and OpenBSD) because otherwise the
empty parameter list is treated as declaring void __once_proxy(...)

This has come up recently because we are now enabling <mutex> etc. on
additional platforms.

        PR libstdc++/50982
        * include/std/mutex (__once_proxy): Use void parameter list to
        work on implicit extern "C" systems.

Tested x86_64-linux and with reports of this solving bootstrap
failures on AIX and OpenBSD, committed to trunk.

Index: include/std/mutex
===================================================================
--- include/std/mutex   (revision 181054)
+++ include/std/mutex   (working copy)
@@ -796,7 +796,7 @@
   __get_once_mutex();
 #endif

-  extern "C" void __once_proxy();
+  extern "C" void __once_proxy(void);

   /// call_once
   template<typename _Callable, typename... _Args>



More information about the Libstdc++ mailing list