2013-07-25 Sterling Augustine * dwarf2out.c (size_of_pubnames): Move code to... (include_pubname_in_output): ...here. New. (output_pubnames): Call include_pubname_in_output. Move assertion. --- gcc/dwarf2out.c (revision 201254) +++ gcc/dwarf2out.c (revision 201255) @@ -7806,6 +7806,30 @@ unmark_all_dies (dw_die_ref die) unmark_all_dies (AT_ref (a)); } +/* Calculate if the entry should appear in the final output file. It may be + from a pruned a type. */ + +static bool +include_pubname_in_output (vec *table, pubname_entry *p) +{ + if (table == pubname_table) + { + /* Enumerator names are part of the pubname table, but the parent + DW_TAG_enumeration_type die may have been pruned. Don't output + them if that is the case. */ + if (p->die->die_tag == DW_TAG_enumerator && !p->die->die_mark) + return false; + + /* Everything else in the pubname table is included. */ + return true; + } + + /* The pubtypes table shouldn't include types that have been + pruned. */ + return (p->die->die_offset != 0 + || !flag_eliminate_unused_debug_types); +} + /* Return the size of the .debug_pubnames or .debug_pubtypes table generated for the compilation unit. */ @@ -7818,9 +7842,7 @@ size_of_pubnames (vecdie->die_offset != 0 - || !flag_eliminate_unused_debug_types) + if (include_pubname_in_output (names, p)) size += strlen (p->name) + DWARF_OFFSET_SIZE + 1; size += DWARF_OFFSET_SIZE; @@ -8999,22 +9021,14 @@ output_pubnames (vecdie->die_tag == DW_TAG_enumerator && !pub->die->die_mark) - continue; - - /* We shouldn't see pubnames for DIEs outside of the main CU. */ - if (names == pubname_table) - gcc_assert (pub->die->die_mark); - - if (names != pubtype_table - || pub->die->die_offset != 0 - || !flag_eliminate_unused_debug_types) + if (include_pubname_in_output (names, pub)) { dw_offset die_offset = pub->die->die_offset; + /* We shouldn't see pubnames for DIEs outside of the main CU. */ + if (names == pubname_table) + gcc_assert (pub->die->die_mark); + /* If we're putting types in their own .debug_types sections, the .debug_pubtypes table will still point to the compile unit (not the type unit), so we want to use the offset of