Introduce common_val_print_checked

A (much) later patch will remove the call to value_check_printable
from common_val_print.  This will needed to preserve some details of
how optimized-out structures are printed.

However, doing this will also break dw2-op-out-param.exp.  Making the
change causes "bt" to print:

However, the test wants to see:

... operand2=<optimized out>

That is, a wholly-optimized out structure should not print its fields.

So, this patch introduces a new common_val_print_checked, which calls
value_check_printable first, and then arranges to use it in the one
spot that affects the test suite.

I was not completely sure if it would be preferable to change the
test.  However, I reasoned that, assuming this output was intentional
in the first place, in a backtrace space is at a premium and so this
is a reasonable approach.  In other spots calling common_val_print,
this behavior is probably unintended, or at least a "don't care".

gdb/ChangeLog
2020-03-13  Tom Tromey  <tom@tromey.com>

	* valprint.h (common_val_print_checked): Declare.
	* valprint.c (common_val_print_checked): New function.
	* stack.c (print_frame_arg): Use common_val_print_checked.
This commit is contained in:
Tom Tromey 2020-03-13 17:39:52 -06:00
parent b0c26e99f5
commit c2a44efee1
4 changed files with 28 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2020-03-13 Tom Tromey <tom@tromey.com>
* valprint.h (common_val_print_checked): Declare.
* valprint.c (common_val_print_checked): New function.
* stack.c (print_frame_arg): Use common_val_print_checked.
2020-03-13 Tom Tromey <tom@tromey.com>
* valprint.c (do_val_print): New function, from val_print.

View File

@ -486,7 +486,7 @@ print_frame_arg (const frame_print_options &fp_opts,
vp_opts.summary
= fp_opts.print_frame_arguments == print_frame_arguments_scalars;
common_val_print (arg->val, &stb, 2, &vp_opts, language);
common_val_print_checked (arg->val, &stb, 2, &vp_opts, language);
}
catch (const gdb_exception_error &except)
{

View File

@ -1236,6 +1236,19 @@ common_val_print (struct value *val, struct ui_file *stream, int recurse,
val, options, language);
}
/* See valprint.h. */
void
common_val_print_checked (struct value *val, struct ui_file *stream,
int recurse,
const struct value_print_options *options,
const struct language_defn *language)
{
if (!value_check_printable (val, stream, options))
return;
common_val_print (val, stream, recurse, options, language);
}
/* Print on stream STREAM the value VAL according to OPTIONS. The value
is printed using the current_language syntax. */

View File

@ -282,4 +282,12 @@ extern bool val_print_check_max_depth (struct ui_file *stream, int recurse,
const struct value_print_options *opts,
const struct language_defn *language);
/* Like common_val_print, but call value_check_printable first. */
extern void common_val_print_checked
(struct value *val,
struct ui_file *stream, int recurse,
const struct value_print_options *options,
const struct language_defn *language);
#endif