diff mbox series

[committed] libstdc++: Ensure language linkage of std::__terminate()

Message ID YWaqgLzCcHnQ39g3@redhat.com
State New
Headers show
Series [committed] libstdc++: Ensure language linkage of std::__terminate() | expand

Commit Message

Jonathan Wakely Oct. 13, 2021, 9:44 a.m. UTC
On 11/10/21 20:38 +0100, Jonathan Wakely wrote:
>On 08/10/21 12:23 +0100, Jonathan Wakely wrote:
>>This adds an inline wrapper for std::terminate that doesn't add the
>>declaration of std::terminate to namespace std. This allows the
>>library to terminate without including all of <exception>.
>>
>>libstdc++-v3/ChangeLog:
>>
>>	* include/bits/atomic_timed_wait.h: Remove unused header.
>>	* include/bits/c++config (std:__terminate): Define.
>>	* include/bits/semaphore_base.h: Remove <exception> and use
>>	__terminate instead of terminate.
>>	* include/bits/std_thread.h: Likewise.
>>	* libsupc++/eh_terminate.cc (std::terminate): Use qualified-id
>>	to call __cxxabiv1::__terminate.
>>
>>
>>This avoids including a few thousand lines of <exception> just for one
>>function declaration. Any objections or better ideas?
>
>I've pushed this to trunk now.

And now I've pushed this fix for it too.

Tested x86_64-linux.
diff mbox series

Patch

commit c1b6c360fcf3fc1c0045c7358d61a83c91b6fa25
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Wed Oct 13 10:35:44 2021

    libstdc++: Ensure language linkage of std::__terminate()
    
    This is needed because people still find it necessary to do:
    
      extern "C" {
      #include <stdlib.h>
      }
    
    libstdc++-v3/ChangeLog:
    
            * include/bits/c++config (__terminate): Add extern "C++".

diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index b76ffeb2562..a6495809671 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -296,7 +296,7 @@  namespace std
 
   // This allows the library to terminate without including all of <exception>
   // and without making the declaration of std::terminate visible to users.
-  __attribute__ ((__noreturn__, __always_inline__))
+  extern "C++" __attribute__ ((__noreturn__, __always_inline__))
   inline void __terminate() _GLIBCXX_USE_NOEXCEPT
   {
     void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__));