[committed,gdb/build,c++17] Fix use of deprecated std::uncaught_exception

Message ID 20200705214752.GA4063@delia
State New
Headers show
Series
  • [committed,gdb/build,c++17] Fix use of deprecated std::uncaught_exception
Related show

Commit Message

Tom de Vries July 5, 2020, 9:47 p.m.
Hi,

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.

Committed to trunk.

Thanks,
- Tom

[gdb/build,c++17] Fix use of deprecated std::uncaught_exception

gdb/ChangeLog:

2020-07-05  Tom de Vries  <tdevries@suse.de>

	PR build/26187
	* inferior.h (struct infcall_suspend_state_deleter): If available, use
	std::uncaught_exceptions instead of deprecated
	std::uncaught_exception.

---
 gdb/inferior.h | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Patch

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 <exception>
+
 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 ());
       }
   }