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  <tromey@adacore.com>

	* printcmd.c (print_variable_and_value): Use
	common_val_print_checked.
This commit is contained in:
Tom Tromey 2021-04-15 10:14:11 -06:00
parent 9e5e03df52
commit 644a2e75ac
2 changed files with 6 additions and 1 deletions

View file

@ -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. */