From: Pedro Alves <palves@redhat.com>
To: Yao Qi <qiyaoltc@gmail.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [RFC master/7.12.1] Don't propagate C++ exceptions across readline using SjLj on SjLj-based exception unwinding
Date: Tue, 20 Dec 2016 19:43:00 -0000 [thread overview]
Message-ID: <6404cafe-6820-cc26-1b1f-ce2d37dee993@redhat.com> (raw)
In-Reply-To: <0dfbf8b3-7066-2bc0-1af2-0f720b1398c8@redhat.com>
On 12/20/2016 04:25 PM, Pedro Alves wrote:
> Great, I've applied it to master now, like below. Will apply to
> the 7.12 branch in a moment.
... and the buildbot let me know that this broke the branch ...
> -static void
> -gdb_rl_callback_read_char_wrapper (gdb_client_data client_data)
> +static struct gdb_exception
> +gdb_rl_callback_read_char_wrapper_noexcept () noexcept
... because I completely forgot that 7.12 is supposed to
build in C and C++03 as well... I've applied this fix on the
branch now. master doesn't need it, since it requires C++11.
From 9bfe0298332782a9c082fb475bdf8eeeef8cf45e Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Tue, 20 Dec 2016 19:18:15 +0000
Subject: [PATCH] gdb: Fix C and C++03 builds
The readline/sjlj-exceptions fix added an unconditional use of
noexcept, but that's only valid C++11, and 7.12 must build with C and
C++03 too. Fix this by adding a GDB_EXCEPT macro that compiles away
to nothing in C, and to throw() in C++03, which I've confirmed fixes
the original issue just the same as noexcept, with GCC 7 + -std=gnu+03
+ sjlj-exceptions.
gdb/ChangeLog:
2016-12-20 Pedro Alves <palves@redhat.com>
PR gdb/20977
* event-top.c (GDB_NOEXCEPT): Define.
(gdb_rl_callback_read_char_wrapper_noexcept): Use GDB_NOEXCEPT
instead of noexcept and use (void) instead of ().
(gdb_rl_callback_handler): Use GDB_NOEXCEPT instead of noexcept.
---
gdb/ChangeLog | 8 ++++++++
gdb/event-top.c | 12 ++++++++++--
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e99025e..0aaae46 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,4 +1,12 @@
2016-12-20 Pedro Alves <palves@redhat.com>
+
+ PR gdb/20977
+ * event-top.c (GDB_NOEXCEPT): Define.
+ (gdb_rl_callback_read_char_wrapper_noexcept): Use GDB_NOEXCEPT
+ instead of noexcept and use (void) instead of ().
+ (gdb_rl_callback_handler): Use GDB_NOEXCEPT instead of noexcept.
+
+2016-12-20 Pedro Alves <palves@redhat.com>
Yao Qi <yao.qi@linaro.org>
PR gdb/20977
diff --git a/gdb/event-top.c b/gdb/event-top.c
index 3e218ff..7f590a9 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -73,6 +73,14 @@ static void async_stop_sig (gdb_client_data);
#endif
static void async_sigterm_handler (gdb_client_data arg);
+#ifndef __cplusplus
+# define GDB_NOEXCEPT
+#elif __cplusplus < 201103L
+# define GDB_NOEXCEPT throw ()
+#else
+# define GDB_NOEXCEPT noexcept
+#endif
+
/* Instead of invoking (and waiting for) readline to read the command
line and pass it back for processing, we use readline's alternate
interface, via callback functions, so that the event loop can react
@@ -162,7 +170,7 @@ void (*after_char_processing_hook) (void);
(sjlj-based) C++ exceptions. */
static struct gdb_exception
-gdb_rl_callback_read_char_wrapper_noexcept () noexcept
+gdb_rl_callback_read_char_wrapper_noexcept (void) GDB_NOEXCEPT
{
struct gdb_exception gdb_expt = exception_none;
@@ -203,7 +211,7 @@ gdb_rl_callback_read_char_wrapper (gdb_client_data client_data)
(sjlj-based) C++ exceptions. */
static void
-gdb_rl_callback_handler (char *rl) noexcept
+gdb_rl_callback_handler (char *rl) GDB_NOEXCEPT
{
struct gdb_exception gdb_rl_expt = exception_none;
struct ui *ui = current_ui;
--
2.5.5
prev parent reply other threads:[~2016-12-20 19:43 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-19 14:42 Yao Qi
2016-12-20 11:50 ` Pedro Alves
2016-12-20 14:33 ` Yao Qi
2016-12-20 16:25 ` Pedro Alves
2016-12-20 19:43 ` Pedro Alves [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=6404cafe-6820-cc26-1b1f-ce2d37dee993@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=qiyaoltc@gmail.com \
/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