aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/optimize.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2015-11-20 10:03:45 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2015-11-20 10:03:45 +0100
commitec5a0fe0422d6f472d75528a14bd22511914e240 (patch)
treeeae3caec19e186893cd194cc99911961fda5e602 /gcc/cp/optimize.c
parent511f5bb114913b7cdaa78cb60ed46d0d5a27f5e3 (diff)
downloadgcc-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.c7
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;