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__));
prev parent 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).