From: Jason Merrill Date: Sun, 31 Aug 2014 21:06:08 +0000 (-0400) Subject: re PR c++/62302 (Change in the comdat used for constructors) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cbb4d6a4b99445fe2f29f17c9a83602d3b9f1606;p=gcc.git re PR c++/62302 (Change in the comdat used for constructors) PR c++/62302 * optimize.c (cdtor_comdat_group): Just look at the DECL_ASSEMBLER_NAME of the 'tors. From-SVN: r214770 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2f7cc664f3d..58890b47248 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-08-31 Jason Merrill + + PR c++/62302 + * optimize.c (cdtor_comdat_group): Just look at the + DECL_ASSEMBLER_NAME of the 'tors. + 2014-08-27 Paolo Carlini PR c++/52892 diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index f9a236e8427..31acb073185 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -159,18 +159,12 @@ build_delete_destructor_body (tree delete_dtor, tree complete_dtor) static tree cdtor_comdat_group (tree complete, tree base) { - tree complete_name = DECL_COMDAT_GROUP (complete); - tree base_name = DECL_COMDAT_GROUP (base); + tree complete_name = DECL_ASSEMBLER_NAME (complete); + tree base_name = DECL_ASSEMBLER_NAME (base); char *grp_name; const char *p, *q; bool diff_seen = false; size_t idx; - if (complete_name == NULL) - complete_name = cxx_comdat_group (complete); - if (base_name == NULL) - base_name = cxx_comdat_group (base); - complete_name = DECL_ASSEMBLER_NAME (complete_name); - base_name = DECL_ASSEMBLER_NAME (base_name); gcc_assert (IDENTIFIER_LENGTH (complete_name) == IDENTIFIER_LENGTH (base_name)); grp_name = XALLOCAVEC (char, IDENTIFIER_LENGTH (complete_name) + 1); @@ -190,7 +184,7 @@ cdtor_comdat_group (tree complete, tree base) diff_seen = true; } grp_name[idx] = '\0'; - gcc_assert (diff_seen || symtab_node::get (complete)->alias); + gcc_assert (diff_seen); return get_identifier (grp_name); } diff --git a/gcc/testsuite/g++.dg/abi/comdat1.C b/gcc/testsuite/g++.dg/abi/comdat1.C new file mode 100644 index 00000000000..e1025e357b3 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/comdat1.C @@ -0,0 +1,13 @@ +// PR c++/62302 + +// { dg-do compile { target *-*-*gnu* } } +// { dg-final { scan-assembler "_ZN3optIiED5Ev,comdat" } } +// { dg-final { scan-assembler-not "_ZN3optIiED0Ev,comdat" } } +// { dg-final { scan-assembler-not "_ZN3optIiED1Ev,comdat" } } +// { dg-final { scan-assembler-not "_ZN3optIiED2Ev,comdat" } } + +struct Option { + virtual ~Option() {} +}; +template class opt : public Option {}; +template class opt;