PR gdb/18021 - defend against "static virtual" methods
authorKeith Seitz <keiths@redhat.com>
Fri, 27 Feb 2015 17:55:07 +0000 (09:55 -0800)
committerKeith Seitz <keiths@redhat.com>
Mon, 23 Mar 2015 19:50:28 +0000 (12:50 -0700)
commit7e993ebf2343a5b39d6d1df29fdebc2818064ae5
treefeff02f0e16e1f84bc4c35ab48298f81f4d2bdb3
parentc53ed7cf577806c9d7d658dec5b70b2de00ec825
PR gdb/18021 - defend against "static virtual" methods

This bug appears to be caused by bad debuginfo. The method
causing the sefault in the reporter's test case is marked both static
and virtual.

This patch simply safegaurds against this case in dwarf2_add_member_fn,
where the code assumes that there is a `this' pointer when a virtual method
is seen (more specifically, when DW_AT_vtable_elem is seen).

It previously dereferenced the first formal parameter
(`this' pointer), which in this case doesn't exist. GDB consequently
segfaulted dereferencing a NULL pointer.

gdb/ChangeLog
PR gdb/18021
* dwarf2read.c (dwarf2_add_member_fn): Issue a complaint
if we find a static method with DW_AT_vtable_elem_location.

gdb/testsuite/ChangeLog
PR gdb/18021
* gdb.dwarf2/staticvirtual.exp: New test.
gdb/ChangeLog
gdb/dwarf2read.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/staticvirtual.exp [new file with mode: 0644]