public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jonathan Wakely <jwakely@redhat.com>
To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org
Subject: [committed] libstdc++: Ensure language linkage of std::__terminate()
Date: Wed, 13 Oct 2021 10:44:32 +0100	[thread overview]
Message-ID: <YWaqgLzCcHnQ39g3@redhat.com> (raw)
In-Reply-To: <YWSSpQUHZeZ+GkWT@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 921 bytes --]

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.



[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 1078 bytes --]

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__));

      reply	other threads:[~2021-10-13  9:44 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-08 11:23 [PATCH] libstdc++: Add wrapper for internal uses of std::terminate Jonathan Wakely
2021-10-11 19:38 ` Jonathan Wakely
2021-10-13  9:44   ` Jonathan Wakely [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YWaqgLzCcHnQ39g3@redhat.com \
    --to=jwakely@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=libstdc++@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).