From 1e7c1b224272b7415ed053c29880b7b0329073b2 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Sun, 5 Jul 2020 23:47:20 +0200 Subject: [PATCH] [gdb/build,c++17] Fix use of deprecated std::uncaught_exception MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When compiling gdb with -std=gnu++17, we run into: ... ../../gdb/inferior.h: In member function ‘void \ infcall_suspend_state_deleter::operator()(infcall_suspend_state*) const’: ../../gdb/inferior.h:83:12: error: ‘bool std::uncaught_exception()’ is \ deprecated [-Werror=deprecated-declarations] 83 | if (!std::uncaught_exception ()) ... Fix this by rewriting using std::uncaught_exceptions. Tested on x86_64-linux with gcc 9.3.1 and -std=gnu17/gnu++17. Tested with test-case from RFC patch https://sourceware.org/pipermail/gdb-patches/2020-June/169970.html. gdb/ChangeLog: 2020-07-05 Tom de Vries PR build/26187 * inferior.h (struct infcall_suspend_state_deleter): If available, use std::uncaught_exceptions instead of deprecated std::uncaught_exception. --- gdb/ChangeLog | 7 +++++++ gdb/inferior.h | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8178e1673b..21dc3e2b2f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2020-07-05 Tom de Vries + + PR build/26187 + * inferior.h (struct infcall_suspend_state_deleter): If available, use + std::uncaught_exceptions instead of deprecated + std::uncaught_exception. + 2020-07-02 Simon Marchi * macroexp.h (macro_stringify): Return diff --git a/gdb/inferior.h b/gdb/inferior.h index 572c5f3ae7..606cece6c0 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -21,6 +21,8 @@ #if !defined (INFERIOR_H) #define INFERIOR_H 1 +#include + struct target_waitstatus; struct frame_info; struct ui_file; @@ -80,7 +82,13 @@ struct infcall_suspend_state_deleter /* If we are restoring the inferior state due to an exception, some error message will be printed. So, only warn the user when we cannot restore during normal execution. */ - if (!std::uncaught_exception ()) + bool unwinding; +#if __cpp_lib_uncaught_exceptions + unwinding = std::uncaught_exceptions () > 0; +#else + unwinding = std::uncaught_exception (); +#endif + if (!unwinding) warning (_("Failed to restore inferior state: %s"), e.what ()); } } -- 2.34.1