aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-08-31 17:06:08 -0400
committerJason Merrill <jason@gcc.gnu.org>2014-08-31 17:06:08 -0400
commitcbb4d6a4b99445fe2f29f17c9a83602d3b9f1606 (patch)
tree84059636e92de51657cae26e1f96c45418c557f4 /gcc
parenta3e3f1166fe2b144b94f501b98e462a97a709ef6 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/optimize.c12
-rw-r--r--gcc/testsuite/g++.dg/abi/comdat1.C13
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>;