diff options
author | Paul Koning <ni1d@arrl.net> | 2013-01-31 13:29:15 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2013-01-31 13:29:15 -0500 |
commit | 73861a4142c04fdeb77b72f8c534e2e967a69bae (patch) | |
tree | 8dbe1b8c90063dc609788e21e0ec4c882763909e /gcc/dwarf2out.c | |
parent | 04d2daddf40fc66447d2544665faf7e412cb403e (diff) | |
download | gcc-73861a4142c04fdeb77b72f8c534e2e967a69bae.zip gcc-73861a4142c04fdeb77b72f8c534e2e967a69bae.tar.gz gcc-73861a4142c04fdeb77b72f8c534e2e967a69bae.tar.bz2 |
re PR debug/55059 (DWARF missing concrete class definition)
PR debug/55059
PR debug/54508
* dwarf2out.c (prune_unused_types_mark): Mark all of parent's
children if parent is a class.
(prune_unused_types_prune): Don't add DW_AT_declaration.
From-SVN: r195622
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 3106dd9..75fea20 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -21905,9 +21905,11 @@ prune_unused_types_mark (dw_die_ref die, int dokids) prune_unused_types_mark_generic_parms_dies (die); /* We also have to mark its parents as used. - (But we don't want to mark our parents' kids due to this.) */ + (But we don't want to mark our parent's kids due to this, + unless it is a class.) */ if (die->die_parent) - prune_unused_types_mark (die->die_parent, 0); + prune_unused_types_mark (die->die_parent, + class_scope_p (die->die_parent)); /* Mark any referenced nodes. */ prune_unused_types_walk_attribs (die); @@ -22082,7 +22084,6 @@ static void prune_unused_types_prune (dw_die_ref die) { dw_die_ref c; - int pruned = 0; gcc_assert (die->die_mark); prune_unused_types_update_strings (die); @@ -22105,25 +22106,13 @@ prune_unused_types_prune (dw_die_ref die) prev->die_sib = c->die_sib; die->die_child = prev; } - pruned = 1; - goto finished; + return; } if (c != prev->die_sib) - { - prev->die_sib = c; - pruned = 1; - } + prev->die_sib = c; prune_unused_types_prune (c); } while (c != die->die_child); - - finished: - /* If we pruned children, and this is a class, mark it as a - declaration to inform debuggers that this is not a complete - class definition. */ - if (pruned && die->die_mark == 1 && class_scope_p (die) - && ! is_declaration_die (die)) - add_AT_flag (die, DW_AT_declaration, 1); } /* Remove dies representing declarations that we never use. */ |