dwarf2out.c (output_pubnames): Add check for DW_TAG_enumerator.
2012-06-26 Sterling Augustine <saugustine@google.com> * dwarf2out.c (output_pubnames): Add check for DW_TAG_enumerator. (prune_unused_types): Likewise. From-SVN: r188992
This commit is contained in:
parent
01a07a642e
commit
d44f5f2552
|
@ -1,3 +1,8 @@
|
||||||
|
2012-06-26 Sterling Augustine <saugustine@google.com>
|
||||||
|
|
||||||
|
* dwarf2out.c (output_pubnames): Add check for DW_TAG_enumerator.
|
||||||
|
(prune_unused_types): Likewise.
|
||||||
|
|
||||||
2012-06-26 Steven Bosscher <steven@gcc.gnu.org>
|
2012-06-26 Steven Bosscher <steven@gcc.gnu.org>
|
||||||
|
|
||||||
* system.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP,
|
* system.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP,
|
||||||
|
|
|
@ -8284,6 +8284,12 @@ output_pubnames (VEC (pubname_entry, gc) * names)
|
||||||
|
|
||||||
FOR_EACH_VEC_ELT (pubname_entry, names, i, pub)
|
FOR_EACH_VEC_ELT (pubname_entry, names, i, pub)
|
||||||
{
|
{
|
||||||
|
/* 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 (pub->die->die_tag == DW_TAG_enumerator && !pub->die->die_mark)
|
||||||
|
continue;
|
||||||
|
|
||||||
/* We shouldn't see pubnames for DIEs outside of the main CU. */
|
/* We shouldn't see pubnames for DIEs outside of the main CU. */
|
||||||
if (names == pubname_table)
|
if (names == pubname_table)
|
||||||
gcc_assert (pub->die->die_mark);
|
gcc_assert (pub->die->die_mark);
|
||||||
|
@ -21239,10 +21245,13 @@ prune_unused_types (void)
|
||||||
prune_unused_types_mark (ctnode->type_die, 1);
|
prune_unused_types_mark (ctnode->type_die, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Also set the mark on nodes referenced from the
|
/* Also set the mark on nodes referenced from the pubname_table. Enumerators
|
||||||
pubname_table. */
|
are unusual in that they are pubnames that are the children of pubtypes.
|
||||||
|
They should only be marked via their parent DW_TAG_enumeration_type die,
|
||||||
|
not as roots in themselves. */
|
||||||
FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub)
|
FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub)
|
||||||
prune_unused_types_mark (pub->die, 1);
|
if (pub->die->die_tag != DW_TAG_enumerator)
|
||||||
|
prune_unused_types_mark (pub->die, 1);
|
||||||
for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
|
for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
|
||||||
prune_unused_types_mark (base_type, 1);
|
prune_unused_types_mark (base_type, 1);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue