I've ported the following four patches from the google/gcc-4_7 branch. (I'll also push these to trunk shortly.)
Bootstrapped, tested, and committed at r200036. -cary gcc: 2012-08-09 Cary Coutant <ccout...@google.com> Backport of pending upstream patch. * dwarf2out.c (clone_as_declaration): Copy DW_AT_abstract_origin attribute. (generate_skeleton_bottom_up): Remove DW_AT_object_pointer attribute from original DIE. (clone_tree_hash): Rename to ... (clone_tree_partial): ... this; change callers. Copy DW_TAG_subprogram DIEs as declarations. 2012-08-22 Cary Coutant <ccout...@google.com> * dwarf2out.c (should_move_die_to_comdat): A type definition can contain a subprogram definition, but don't move it to a comdat unit. 2012-08-29 Cary Coutant <ccout...@google.com> * dwarf2out.c (clone_tree_partial): Remove. (copy_decls_walk): Don't copy children of a declaration into a type unit. 2012-08-31 Cary Coutant <ccout...@google.com> * dwarf2out.c (clone_tree_partial): Restore. (copy_decls_walk): Call clone_tree_partial to copy children of non-declaration DIEs. gcc/testsuite: 2012-08-09 Cary Coutant <ccout...@google.com> Backport of pending upstream patch. * g++.dg/debug/dwarf2/dwarf4-nested.C: New test case. * g++.dg/debug/dwarf2/dwarf4-typedef.C: Add -fdebug-types-section flag.