summaryrefslogtreecommitdiff
path: root/gdb/value.c
diff options
context:
space:
mode:
authoraburgess <aburgess>2013-07-30 15:05:00 +0000
committeraburgess <aburgess>2013-07-30 15:05:00 +0000
commitfe870957318b688c9f8788863a3447a88262f3d5 (patch)
tree65caf6f14d751eed04f1b3da688da77ed17b8a21 /gdb/value.c
parent19dbd794eaea44916da1de106ae42a5d1e4523e0 (diff)
downloadgdb-fe870957318b688c9f8788863a3447a88262f3d5.tar.gz
value_fetch_lazy, ensure parent is not lazy and check parent for validity.
http://sourceware.org/ml/gdb-patches/2013-07/msg00316.html gdb/ChangeLog * value.c (value_fetch_lazy): Ensure parent value is not lazy before checking which bits of the parent, not the child, value are valid. gdb/testsuite/ChangeLog * gdb.dwarf2/pieces-optimized-out.exp: New file. * gdb.dwarf2/pieces-optimized-out.c: New file. * gdb.dwarf2/pieces-optimized-out.S: New file.
Diffstat (limited to 'gdb/value.c')
-rw-r--r--gdb/value.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gdb/value.c b/gdb/value.c
index 04f325f9760..8e0f8c4dcc0 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -3433,7 +3433,10 @@ value_fetch_lazy (struct value *val)
LONGEST offset = value_offset (val);
LONGEST num;
- if (!value_bits_valid (val,
+ if (value_lazy (parent))
+ value_fetch_lazy (parent);
+
+ if (!value_bits_valid (parent,
TARGET_CHAR_BIT * offset + value_bitpos (val),
value_bitsize (val)))
error (_("value has been optimized out"));