diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-11-20 10:03:45 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-11-20 10:03:45 +0100 |
commit | ec5a0fe0422d6f472d75528a14bd22511914e240 (patch) | |
tree | eae3caec19e186893cd194cc99911961fda5e602 /gcc/cp/optimize.c | |
parent | 511f5bb114913b7cdaa78cb60ed46d0d5a27f5e3 (diff) | |
download | gcc-ec5a0fe0422d6f472d75528a14bd22511914e240.zip gcc-ec5a0fe0422d6f472d75528a14bd22511914e240.tar.gz gcc-ec5a0fe0422d6f472d75528a14bd22511914e240.tar.bz2 |
re PR c++/67354 (internal compiler error: in add_to_same_comdat_group, at symtab.c:421)
PR c++/67354
* cp-tree.h (defer_mangling_aliases): Declare.
(generate_mangling_aliases): New prototype.
* decl2.c (defer_mangling_aliases): New variable.
(note_mangling_alias): Use !defer_mangling_aliases
instead of at_eof.
(generate_mangling_aliases): No longer static. Clear
defer_mangling_aliases.
* optimize.c (maybe_thunk_body): Defer emitting mangling aliases
if !defer_mangling_aliases until the fns are put into the same
comdat group.
* g++.dg/abi/mangle67.C: New test.
From-SVN: r230646
Diffstat (limited to 'gcc/cp/optimize.c')
-rw-r--r-- | gcc/cp/optimize.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index c4e7020..a5f84a0 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -270,7 +270,11 @@ maybe_thunk_body (tree fn, bool force) } else if (HAVE_COMDAT_GROUP) { + /* At eof, defer creation of mangling aliases temporarily. */ + bool save_defer_mangling_aliases = defer_mangling_aliases; + defer_mangling_aliases = true; tree comdat_group = cdtor_comdat_group (fns[1], fns[0]); + defer_mangling_aliases = save_defer_mangling_aliases; cgraph_node::get_create (fns[0])->set_comdat_group (comdat_group); cgraph_node::get_create (fns[1])->add_to_same_comdat_group (cgraph_node::get_create (fns[0])); @@ -281,6 +285,9 @@ maybe_thunk_body (tree fn, bool force) virtual, it goes into the same comdat group as well. */ cgraph_node::get_create (fns[2])->add_to_same_comdat_group (symtab_node::get (fns[0])); + /* Emit them now that the thunks are same comdat group aliases. */ + if (!save_defer_mangling_aliases) + generate_mangling_aliases (); TREE_PUBLIC (fn) = false; DECL_EXTERNAL (fn) = false; DECL_INTERFACE_KNOWN (fn) = true; |