https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83765
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Doesn't seem to work :/ I guess making the old_die && declaration more prevalent might work. Index: gcc/dwarf2out.c =================================================================== --- gcc/dwarf2out.c (revision 256378) +++ gcc/dwarf2out.c (working copy) @@ -22044,6 +22044,11 @@ gen_subprogram_die (tree decl, dw_die_re int declaration = (current_function_decl != decl || class_or_namespace_scope_p (context_die)); + /* A declaration that has been previously dumped needs no + additional information. */ + if (old_die && declaration) + return; + /* Now that the C++ front end lazily declares artificial member fns, we might need to retrofit the declaration into its class. */ if (!declaration && !origin && !old_die @@ -22084,11 +22089,6 @@ gen_subprogram_die (tree decl, dw_die_re much as possible. */ else if (old_die) { - /* A declaration that has been previously dumped needs no - additional information. */ - if (declaration) - return; - if (!get_AT_flag (old_die, DW_AT_declaration) /* We can have a normal definition following an inline one in the case of redefinition of GNU C extern inlines.