summaryrefslogtreecommitdiff
path: root/gdb/ada-valprint.c
diff options
context:
space:
mode:
authorYao Qi <yao.qi@linaro.org>2017-03-03 17:16:19 +0000
committerYao Qi <yao.qi@linaro.org>2017-03-03 17:16:19 +0000
commit7d45f3df96ca108f6d7d0c5e4279e22b820145fa (patch)
tree392d5cee7de9d4562d1f7ebbbf09e664b36820ab /gdb/ada-valprint.c
parent611a3ca929d6529f4e7576b0e2ffb588839c1b21 (diff)
downloadbinutils-gdb-7d45f3df96ca108f6d7d0c5e4279e22b820145fa.tar.gz
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 <yao.qi@linaro.org> PR gdb/21165 * ada-valprint.c (ada_val_print_ref): Call value_fetch_lazy if value is lazy. * valprint.c (common_val_print): Likewise.
Diffstat (limited to 'gdb/ada-valprint.c')
-rw-r--r--gdb/ada-valprint.c3
1 files changed, 3 insertions, 0 deletions
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,