For this code: class A { int f(void); }; int (A::*ptr) (void); GCC will output debug information claiming that the type of PTR is: struct { void (*__pfn) (args, ...); ptrdiff_t __delta; }; At least for dwarf2, GCC should output DW_TAG_ptr_to_member, just like it does for data members. The definition in the spec of DW_AT_use_location is pretty meaningless for function members (that's come up on the dwarf list before, but was never resolved, as far as I know), so it should probably be omitted. This does not affect GDB much. Versions up to 6.5 have poor pointer to member support. The next release will be better, but will also recognize GCC's current broken debug information.
Confirmed, I am adding the keyword wrong-debug which almost true.
*** Bug 43312 has been marked as a duplicate of this bug. ***
Mine.
Patch posted to http://gcc.gnu.org/ml/gcc-patches/2011-03/msg00949.html
Some discussion of the patch in comment #4 can be found here: http://gcc.gnu.org/ml/gcc-patches/2011-05/threads.html#00225
Author: jakub Date: Thu Nov 3 21:18:49 2016 New Revision: 241832 URL: https://gcc.gnu.org/viewcvs?rev=241832&root=gcc&view=rev Log: PR debug/28767 PR debug/56974 * langhooks.h (struct lang_hooks_for_types): Add type_dwarf_attribute langhook. * langhooks.c (lhd_type_dwarf_attribute): New function. * langhooks-def.h (lhd_type_dwarf_attribute): Declare. (LANG_HOOKS_TYPE_DWARF_ATTRIBUTE): Define. (LANG_HOOKS_FOR_TYPES_INITIALIZER): Add LANG_HOOKS_TYPE_DWARF_ATTRIBUTE. (check_qualified_type, check_aligned_type): Call it. * dwarf2out.c (modified_type_die): Don't use type_main_variant for FUNCTION_TYPE or METHOD_TYPE, instead walk over variants with check_base_type and check_lang_type. (gen_ptr_to_mbr_type_die): If lookup_type_die is already non-NULL, return early. For pointer-to-data-member add DW_AT_use_location attribute. (gen_subroutine_type_die): Add DW_AT_{,rvalue_}reference attribute if needed. (gen_type_die_with_usage): Don't use type_main_variant for FUNCTION_TYPE or METHOD_TYPE, instead walk over variants with check_base_type and check_lang_type. Formatting fixes. Call get_debug_type langhook. cp/ * tree.c (cp_check_qualified_type): Use check_base_type and TYPE_QUALS comparison instead of check_qualified_type. (cxx_type_hash_eq): Return false if type_memfn_rqual don't match. * cp-objcp-common.c (cp_get_debug_type): New function. (cp_decl_dwarf_attribute): Don't handle types here. (cp_type_dwarf_attribute): New function. * cp-objcp-common.h (cp_get_debug_type, cp_type_dwarf_attribute): Declare. (LANG_HOOKS_GET_DEBUG_TYPE, LANG_HOOKS_TYPE_DWARF_ATTRIBUTE): Define. testsuite/ * g++.dg/debug/dwarf2/ptrdmem-1.C: New test. * g++.dg/debug/dwarf2/ref-3.C: New test. * g++.dg/debug/dwarf2/ref-4.C: New test. * g++.dg/debug/dwarf2/refqual-1.C: New test. * g++.dg/debug/dwarf2/refqual-2.C: New test. Added: trunk/gcc/testsuite/g++.dg/debug/dwarf2/ptrdmem-1.C trunk/gcc/testsuite/g++.dg/debug/dwarf2/ref-3.C trunk/gcc/testsuite/g++.dg/debug/dwarf2/ref-4.C trunk/gcc/testsuite/g++.dg/debug/dwarf2/refqual-1.C trunk/gcc/testsuite/g++.dg/debug/dwarf2/refqual-2.C Modified: trunk/gcc/ChangeLog trunk/gcc/cp/ChangeLog trunk/gcc/cp/cp-objcp-common.c trunk/gcc/cp/cp-objcp-common.h trunk/gcc/dwarf2out.c trunk/gcc/langhooks-def.h trunk/gcc/langhooks.c trunk/gcc/langhooks.h trunk/gcc/testsuite/ChangeLog
Fixed for 7+.