diff options
author | Tom Tromey <tromey@redhat.com> | 2012-03-05 20:53:15 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2012-03-05 20:53:15 +0000 |
commit | 9f9f1f31e7b0df2da2fac6a8de06d9286f71f4d2 (patch) | |
tree | 698b637c0e8bef4bb35e77009177a91a29246f28 /gdb | |
parent | b7b189f3cf682e67fb3ccd5908ec4b980735a620 (diff) | |
download | gdb-9f9f1f31e7b0df2da2fac6a8de06d9286f71f4d2.zip gdb-9f9f1f31e7b0df2da2fac6a8de06d9286f71f4d2.tar.gz gdb-9f9f1f31e7b0df2da2fac6a8de06d9286f71f4d2.tar.bz2 |
* value.c (value_primitive_field): Don't fetch contents for
non-virtual bases.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/value.c | 16 |
2 files changed, 16 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2def55d..65ba222 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2012-03-05 Tom Tromey <tromey@redhat.com> + * value.c (value_primitive_field): Don't fetch contents for + non-virtual bases. + +2012-03-05 Tom Tromey <tromey@redhat.com> + * jv-valprint.c (java_value_print): Correctly compute 'obj_addr'. 2012-03-05 Joel Brobecker <brobecker@adacore.com> diff --git a/gdb/value.c b/gdb/value.c index bee6907..e8eb33f 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -2556,11 +2556,17 @@ value_primitive_field (struct value *arg1, int offset, if (VALUE_LVAL (arg1) == lval_register && value_lazy (arg1)) value_fetch_lazy (arg1); - boffset = baseclass_offset (arg_type, fieldno, - value_contents (arg1), - value_embedded_offset (arg1), - value_address (arg1), - arg1); + /* We special case virtual inheritance here because this + requires access to the contents, which we would rather avoid + for references to ordinary fields of unavailable values. */ + if (BASETYPE_VIA_VIRTUAL (arg_type, fieldno)) + boffset = baseclass_offset (arg_type, fieldno, + value_contents (arg1), + value_embedded_offset (arg1), + value_address (arg1), + arg1); + else + boffset = TYPE_FIELD_BITPOS (arg_type, fieldno) / 8; if (value_lazy (arg1)) v = allocate_value_lazy (value_enclosing_type (arg1)); |