value_bits_valid: Fix latent bug.
authorPedro Alves <palves@redhat.com>
Thu, 4 Jul 2013 16:08:22 +0000 (16:08 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 4 Jul 2013 16:08:22 +0000 (16:08 +0000)
Doing something else, I factored out the bits of the value_bits_valid
function that actually handle the check_validity hook, and
surprisingly found out that the result was misbehaving.  Turns out
value_bits_valid has a latent bug.  If the value is not lval_computed,
or doesn't have a check_validity hook, then we should assume the value
is entirely valid, not invalid.  This is currently masked by the
value->optimized_out check -- I ran the testsuite with a gdb_assert(0)
inserted in place of that return being touched by the patch, and it
never triggers.

Tested on x86_64 Fedora 17.

gdb/
2013-07-04  Pedro Alves  <palves@redhat.com>

* value.c (value_bits_valid): If the value is not lval_computed,
or doesn't have a check_validity hook, assume the value is entirely
valid.

gdb/ChangeLog
gdb/value.c

index 77db20096f6f23e6c9eb7eef1deefbdcd6879c46..2353e71e9ebdf4df0c7a16e07996c4666fa7b1f1 100644 (file)
@@ -1,3 +1,9 @@
+2013-07-04  Pedro Alves  <palves@redhat.com>
+
+       * value.c (value_bits_valid): If the value is not lval_computed,
+       or doesn't have a check_validity hook, assume the value is entirely
+       valid.
+
 2013-07-04  Andrew Burgess  <aburgess@broadcom.com>
 
        * stack.c (read_frame_arg): No longer fetch lazy values.
index ce4b13a17a2a74f0a70963cfe34d80b8d2b9f3ea..353f62a2caac5bcd1d53cf1bf28ff0ebb09d08f6 100644 (file)
@@ -1086,7 +1086,7 @@ value_bits_valid (const struct value *value, int offset, int length)
     return 1;
   if (value->lval != lval_computed
       || !value->location.computed.funcs->check_validity)
-    return 0;
+    return 1;
   return value->location.computed.funcs->check_validity (value, offset,
                                                         length);
 }