diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-01-26 22:45:57 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-01-26 22:45:57 +0100 |
commit | b0670cc0eb260ce182c7eb2c0b25bcc0b59a0e68 (patch) | |
tree | 7847f74b9e981fab439502e6718fdac6e5b14fce /gcc/dwarf2out.c | |
parent | f7c06c0f9955a6d12dd7eaef040de563fe279166 (diff) | |
download | gcc-b0670cc0eb260ce182c7eb2c0b25bcc0b59a0e68.zip gcc-b0670cc0eb260ce182c7eb2c0b25bcc0b59a0e68.tar.gz gcc-b0670cc0eb260ce182c7eb2c0b25bcc0b59a0e68.tar.bz2 |
re PR c++/79129 (ICE with -fdebug-types-section starting with r240578)
PR debug/79129
* dwarf2out.c (generate_skeleton_bottom_up): For children with
comdat_type_p set, just clone them, but keep the children in the
original DIE.
* g++.dg/debug/dwarf2/pr79129.C: New test.
From-SVN: r244955
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index f69c588..1b2c04c 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -7918,6 +7918,19 @@ generate_skeleton_bottom_up (skeleton_chain_node *parent) add_child_die (parent->new_die, c); c = prev; } + else if (c->comdat_type_p) + { + /* This is the skeleton of earlier break_out_comdat_types + type. Clone the existing DIE, but keep the children + under the original (which is in the main CU). */ + dw_die_ref clone = clone_die (c); + + replace_child (c, clone, prev); + generate_skeleton_ancestor_tree (parent); + add_child_die (parent->new_die, c); + c = clone; + continue; + } else { /* Clone the existing DIE, move the original to the skeleton @@ -7936,6 +7949,7 @@ generate_skeleton_bottom_up (skeleton_chain_node *parent) replace_child (c, clone, prev); generate_skeleton_ancestor_tree (parent); add_child_die (parent->new_die, c); + node.old_die = clone; node.new_die = c; c = clone; } |