gdb
* valops.c (search_struct_field): Account for value_embedded_offset. Fix check for virtual base past the end of the object. Use value_copy when making a slice of the value. gdb/testsuite * gdb.cp/virtbase.exp: Make test case names unique.
This commit is contained in:
parent
6ac33a4e87
commit
1a334831c0
|
@ -1,3 +1,9 @@
|
||||||
|
2010-02-04 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* valops.c (search_struct_field): Account for
|
||||||
|
value_embedded_offset. Fix check for virtual base past the end of
|
||||||
|
the object. Use value_copy when making a slice of the value.
|
||||||
|
|
||||||
2010-02-04 H.J. Lu <hongjiu.lu@intel.com>
|
2010-02-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR tui/9622
|
PR tui/9622
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2010-02-04 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* gdb.cp/virtbase.exp: Make test case names unique.
|
||||||
|
|
||||||
2010-02-02 Tom Tromey <tromey@redhat.com>
|
2010-02-02 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* gdb.cp/virtbase.exp: Add regression tests.
|
* gdb.cp/virtbase.exp: Add regression tests.
|
||||||
|
|
|
@ -42,13 +42,13 @@ gdb_continue_to_breakpoint "first breakpoint"
|
||||||
# In PR 11226, we failed to print x correctly in the "print *this"
|
# In PR 11226, we failed to print x correctly in the "print *this"
|
||||||
# case.
|
# case.
|
||||||
gdb_test "print *this" " = {<mc::Base> = {x = 2}, _vptr.Middle = $hex, y = 3}"
|
gdb_test "print *this" " = {<mc::Base> = {x = 2}, _vptr.Middle = $hex, y = 3}"
|
||||||
gdb_test "print x" " = 2"
|
gdb_test "print x" " = 2" "print x in get_y"
|
||||||
|
|
||||||
gdb_breakpoint [gdb_get_line_number "breakpoint 2"]
|
gdb_breakpoint [gdb_get_line_number "breakpoint 2"]
|
||||||
gdb_continue_to_breakpoint "second breakpoint"
|
gdb_continue_to_breakpoint "second breakpoint"
|
||||||
|
|
||||||
# In PR 11226, we could not find x here.
|
# In PR 11226, we could not find x here.
|
||||||
gdb_test "print x" " = 2"
|
gdb_test "print x" " = 2" "print x in get_z"
|
||||||
|
|
||||||
gdb_breakpoint [gdb_get_line_number "breakpoint 3"]
|
gdb_breakpoint [gdb_get_line_number "breakpoint 3"]
|
||||||
gdb_continue_to_breakpoint "third breakpoint"
|
gdb_continue_to_breakpoint "third breakpoint"
|
||||||
|
|
24
gdb/valops.c
24
gdb/valops.c
|
@ -1903,7 +1903,9 @@ search_struct_field (char *name, struct value *arg1, int offset,
|
||||||
|
|
||||||
boffset = baseclass_offset (type, i,
|
boffset = baseclass_offset (type, i,
|
||||||
value_contents (arg1) + offset,
|
value_contents (arg1) + offset,
|
||||||
value_address (arg1) + offset);
|
value_address (arg1)
|
||||||
|
+ value_embedded_offset (arg1)
|
||||||
|
+ offset);
|
||||||
if (boffset == -1)
|
if (boffset == -1)
|
||||||
error (_("virtual baseclass botch"));
|
error (_("virtual baseclass botch"));
|
||||||
|
|
||||||
|
@ -1911,8 +1913,9 @@ search_struct_field (char *name, struct value *arg1, int offset,
|
||||||
by the user program. Make sure that it still points to a
|
by the user program. Make sure that it still points to a
|
||||||
valid memory location. */
|
valid memory location. */
|
||||||
|
|
||||||
boffset += offset;
|
boffset += value_embedded_offset (arg1) + offset;
|
||||||
if (boffset < 0 || boffset >= TYPE_LENGTH (type))
|
if (boffset < 0
|
||||||
|
|| boffset >= TYPE_LENGTH (value_enclosing_type (arg1)))
|
||||||
{
|
{
|
||||||
CORE_ADDR base_addr;
|
CORE_ADDR base_addr;
|
||||||
|
|
||||||
|
@ -1927,18 +1930,9 @@ search_struct_field (char *name, struct value *arg1, int offset,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (VALUE_LVAL (arg1) == lval_memory && value_lazy (arg1))
|
v2 = value_copy (arg1);
|
||||||
v2 = allocate_value_lazy (basetype);
|
deprecated_set_value_type (v2, basetype);
|
||||||
else
|
set_value_embedded_offset (v2, boffset);
|
||||||
{
|
|
||||||
v2 = allocate_value (basetype);
|
|
||||||
memcpy (value_contents_raw (v2),
|
|
||||||
value_contents_raw (arg1) + boffset,
|
|
||||||
TYPE_LENGTH (basetype));
|
|
||||||
}
|
|
||||||
set_value_component_location (v2, arg1);
|
|
||||||
VALUE_FRAME_ID (v2) = VALUE_FRAME_ID (arg1);
|
|
||||||
set_value_offset (v2, value_offset (arg1) + boffset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found_baseclass)
|
if (found_baseclass)
|
||||||
|
|
Loading…
Reference in New Issue