From 40c549d6006296af1f9914078b1a73a38ea3b9df Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 18 Mar 2010 18:02:00 +0000 Subject: [PATCH] * infcmd.c (finish_command_continuation): Wrap print_return_value in TRY_CATCH. --- gdb/ChangeLog | 5 +++++ gdb/infcmd.c | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 576eb185a74..746af2914c6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2010-03-18 Tom Tromey + + * infcmd.c (finish_command_continuation): Wrap print_return_value + in TRY_CATCH. + 2010-03-18 Ulrich Weigand * mi/mi-main.c (mi_cmd_list_thread_groups): Use get_current_arch diff --git a/gdb/infcmd.c b/gdb/infcmd.c index e2235db2de0..174acde8da7 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -1439,7 +1439,19 @@ finish_command_continuation (void *arg) _("finish_command: function has no target type")); if (TYPE_CODE (value_type) != TYPE_CODE_VOID) - print_return_value (SYMBOL_TYPE (a->function), value_type); + { + volatile struct gdb_exception ex; + + TRY_CATCH (ex, RETURN_MASK_ALL) + { + /* print_return_value can throw an exception in some + circumstances. We need to catch this so that we still + delete the breakpoint. */ + print_return_value (SYMBOL_TYPE (a->function), value_type); + } + if (ex.reason < 0) + exception_print (gdb_stdout, ex); + } } /* We suppress normal call of normal_stop observer and do it here so -- 2.30.2