From 7d45f3df96ca108f6d7d0c5e4279e22b820145fa Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Fri, 3 Mar 2017 17:16:19 +0000 Subject: [PATCH] Fetch lazy value before calling val_print As reported in PR 21165, (gdb) info locals^M gv = /home/yao/SourceCode/gnu/gdb/git/gdb/value.c:372: internal-error: int value_bits_any_optimized_out(const value*, int, int): Assertion `!value->lazy' failed.^M A problem internal to GDB has been detected,^M further debugging may prove unreliable.^M Quit this debugging session? (y or n) FAIL: gdb.ada/info_locals_renaming.exp: info locals (GDB internal error) Resyncing due to internal error. This internal error is caused by e8b24d9 (Remove parameter valaddr from la_val_print). Commit e8b24d9 removes some calls to value_contents_for_printing, but value_fetch_lazy is not called, so the internal error above is triggered. This patch adds value_fetch_lazy call before val_print. gdb: 2017-03-03 Yao Qi PR gdb/21165 * ada-valprint.c (ada_val_print_ref): Call value_fetch_lazy if value is lazy. * valprint.c (common_val_print): Likewise. --- gdb/ChangeLog | 7 +++++++ gdb/ada-valprint.c | 3 +++ gdb/valprint.c | 3 +++ 3 files changed, 13 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b06029154fd..368b24c93ef 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2017-03-03 Yao Qi + + PR gdb/21165 + * ada-valprint.c (ada_val_print_ref): Call value_fetch_lazy if + value is lazy. + * valprint.c (common_val_print): Likewise. + 2017-02-28 Peter Bergner * NEWS: Mention new set/show disassembler-options commands. diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c index 804cf403f6f..d2489a2b2e8 100644 --- a/gdb/ada-valprint.c +++ b/gdb/ada-valprint.c @@ -1058,6 +1058,9 @@ ada_val_print_ref (struct type *type, const gdb_byte *valaddr, (Eg: an array whose bounds are not set yet). */ ada_ensure_varsize_limit (value_type (deref_val)); + if (value_lazy (deref_val)) + value_fetch_lazy (deref_val); + val_print (value_type (deref_val), value_embedded_offset (deref_val), value_address (deref_val), stream, recurse + 1, diff --git a/gdb/valprint.c b/gdb/valprint.c index c3e17ffe6d1..529f9a5058d 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -1201,6 +1201,9 @@ common_val_print (struct value *val, struct ui_file *stream, int recurse, get a fixed representation of our value. */ val = ada_to_fixed_value (val); + if (value_lazy (val)) + value_fetch_lazy (val); + val_print (value_type (val), value_embedded_offset (val), value_address (val), stream, recurse, -- 2.30.2