* cp-valprint.c (cp_print_value_fields): Use get_vptr_fieldno.
gdb/testsuite
* gdb.cp/derivation.exp: Add regression test.
* gdb.cp/derivation.cc (class V_base, class V_inter, class
V_derived): New.
(vderived): New global.
+2012-09-27 Tom Tromey <tromey@redhat.com>
+
+ Fix https://bugzilla.redhat.com/show_bug.cgi?id=849357
+ * cp-valprint.c (cp_print_value_fields): Use get_vptr_fieldno.
+
2012-09-27 Joel Brobecker <brobecker@adacore.com>
* sol-thread.c (sol_thread_fetch_registers)
{
int statmem_obstack_initial_size = 0;
int stat_array_obstack_initial_size = 0;
-
+ struct type *vptr_basetype = NULL;
+ int vptr_fieldno;
+
if (dont_print_statmem == 0)
{
statmem_obstack_initial_size =
}
}
+ vptr_fieldno = get_vptr_fieldno (type, &vptr_basetype);
for (i = n_baseclasses; i < len; i++)
{
/* If requested, skip printing of static fields. */
v, stream, recurse + 1,
options);
}
- else if (i == TYPE_VPTR_FIELDNO (type))
+ else if (i == vptr_fieldno && type == vptr_basetype)
{
int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
struct type *i_type = TYPE_FIELD_TYPE (type, i);
+2012-09-27 Tom Tromey <tromey@redhat.com>
+
+ * gdb.cp/derivation.exp: Add regression test.
+ * gdb.cp/derivation.cc (class V_base, class V_inter, class
+ V_derived): New.
+ (vderived): New global.
+
2012-09-26 Tom Tromey <tromey@redhat.com>
* gdb.dwarf2/dw2-common-block.S: New file.
};
+class V_base
+{
+public:
+ virtual void m();
+ int base;
+};
+
+void
+V_base::m()
+{
+}
+
+class V_inter : public virtual V_base
+{
+public:
+ virtual void f();
+ int inter;
+};
+
+void
+V_inter::f()
+{
+}
+class V_derived : public V_inter
+{
+public:
+ double x;
+};
+V_derived vderived;
int A::afoo() {
return 1;
gdb_test "print g_instance.bfoo()" "\\$\[0-9\]+ = 2" "print value of g_instance.bfoo()"
gdb_test "print g_instance.cfoo()" "\\$\[0-9\]+ = 3" "print value of g_instance.cfoo()"
+
+# This is a regression test for a bug that caused a crash when trying
+# to print the vtbl pointer. We don't care about the output so much
+# here (it is tested elsewhere), just that gdb doesn't crash. We test
+# "ptype" first because, before the gdb fix, that was the only code
+# path calling get_vptr_fieldno.
+gdb_test "ptype vderived" "type = .*"
+gdb_test "print vderived" " = {.* inter = 0.*x = 0}"