diff options
author | Kent Cheung <kent.cheung@arm.com> | 2021-05-13 15:42:20 +0100 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2021-05-14 06:51:21 +0100 |
commit | ecf25064e87a3d2d59871b3ea7126fa0dee0001d (patch) | |
tree | da6aa892b6386531716e8e1b3b33f4168f09d3e4 /gdb/cp-valprint.c | |
parent | 64654371d6324794d11131fc95c1bc4caaaf173d (diff) | |
download | gdb-ecf25064e87a3d2d59871b3ea7126fa0dee0001d.zip gdb-ecf25064e87a3d2d59871b3ea7126fa0dee0001d.tar.gz gdb-ecf25064e87a3d2d59871b3ea7126fa0dee0001d.tar.bz2 |
gdb: fix pretty printing max depth behaviour
The 'print max-depth' feature incorrectly causes GDB to skip printing
the string representation of pretty printed variables if the variable
is stored at a nested depth corresponding to the set max-depth value.
This change ensures that it is always printed before checking whether
the maximum print depth has been reached.
Regression tested with GCC 7.3.0 on x86_64, ppc64le, aarch64.
gdb/ChangeLog:
* cp-valprint.c (cp_print_value): Replaced duplicate code.
* guile/scm-pretty-print.c (ppscm_print_children): Check max_depth
just before printing child values.
(gdbscm_apply_val_pretty_printer): Don't check max_depth before
printing string representation.
* python/py-prettyprint.c (print_children): Check max_depth just
before printing child values.
(gdbpy_apply_val_pretty_printer): Don't check max_depth before
printing string representation.
gdb/testsuite/ChangeLog:
* gdb.python/py-format-string.c: Added a variable to test.
* gdb.python/py-format-string.exp: Check string representation is
printed at appropriate max_depth settings.
* gdb.python/py-nested-maps.exp: Likewise.
* gdb.guile/scm-pretty-print.exp: Add additional tests.
Diffstat (limited to 'gdb/cp-valprint.c')
-rw-r--r-- | gdb/cp-valprint.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index d303c83..6c04494 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -495,14 +495,8 @@ cp_print_value (struct value *val, struct ui_file *stream, { int result = 0; - if (options->max_depth > -1 - && recurse >= options->max_depth) - { - const struct language_defn *language = current_language; - gdb_assert (language->struct_too_deep_ellipsis () != NULL); - fputs_filtered (language->struct_too_deep_ellipsis (), stream); - } - else + if (!val_print_check_max_depth (stream, recurse, options, + current_language)) { struct value *baseclass_val = value_primitive_field (val, 0, i, type); |