From 644a2e75ace6b5e76f91d38c28c3b97fcfdeeaa5 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 15 Apr 2021 10:14:11 -0600 Subject: [PATCH] Use common_val_print_checked in print_variable_and_value GDB was crashing in "bt full" for a large Ada program. I tracked this down to a combination of bugs. The first bug, fixed here, is that print_variable_and_value calls common_val_print. Normally only the value-printing implementation should call this; from the top level, common_val_print_checked is preferred, because it correctly handles values that are wholly optimized out. I wasn't able to write a test case for this. gdb/ChangeLog 2021-04-15 Tom Tromey * printcmd.c (print_variable_and_value): Use common_val_print_checked. --- gdb/ChangeLog | 5 +++++ gdb/printcmd.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 22a79c2f88c..54a035c51bb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-04-15 Tom Tromey + + * printcmd.c (print_variable_and_value): Use + common_val_print_checked. + 2021-04-15 Tom Tromey * rust-exp.y (rust_parser::convert_ast_to_expression): Update. diff --git a/gdb/printcmd.c b/gdb/printcmd.c index c82f709136f..a4f62f207d0 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -2387,7 +2387,7 @@ print_variable_and_value (const char *name, struct symbol *var, val = read_var_value (var, NULL, frame); get_user_print_options (&opts); opts.deref_ref = 1; - common_val_print (val, stream, indent, &opts, current_language); + common_val_print_checked (val, stream, indent, &opts, current_language); /* common_val_print invalidates FRAME when a pretty printer calls inferior function. */ -- 2.30.2