diff options
author | Jason Merrill <jason@redhat.com> | 2014-08-31 17:06:08 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-08-31 17:06:08 -0400 |
commit | cbb4d6a4b99445fe2f29f17c9a83602d3b9f1606 (patch) | |
tree | 84059636e92de51657cae26e1f96c45418c557f4 /gcc | |
parent | a3e3f1166fe2b144b94f501b98e462a97a709ef6 (diff) | |
download | gcc-cbb4d6a4b99445fe2f29f17c9a83602d3b9f1606.zip gcc-cbb4d6a4b99445fe2f29f17c9a83602d3b9f1606.tar.gz gcc-cbb4d6a4b99445fe2f29f17c9a83602d3b9f1606.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/optimize.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/comdat1.C | 13 |
3 files changed, 22 insertions, 9 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2f7cc66..58890b4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-08-31 Jason Merrill <jason@redhat.com> + + PR c++/62302 + * optimize.c (cdtor_comdat_group): Just look at the + DECL_ASSEMBLER_NAME of the 'tors. + 2014-08-27 Paolo Carlini <paolo.carlini@oracle.com> PR c++/52892 diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index f9a236e..31acb07 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 0000000..e1025e3 --- /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 DataType> class opt : public Option {}; +template class opt<int>; |