+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
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);
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);
}
--- /dev/null
+// 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>;