aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-06-29 21:46:05 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2010-06-29 21:46:05 +0200
commit087fa34bad4ee46be9cd53314161239ad75b0743 (patch)
tree0996b52dea058d9a9d2f2a55d48731a77ba4240f /gcc
parent0287000a9f870363bf864354d7cceffc4b575dec (diff)
downloadgcc-087fa34bad4ee46be9cd53314161239ad75b0743.zip
gcc-087fa34bad4ee46be9cd53314161239ad75b0743.tar.gz
gcc-087fa34bad4ee46be9cd53314161239ad75b0743.tar.bz2
re PR tree-optimization/43801 (error: function causes a section type conflict with -fipa-cp -fipa-cp-clone)
PR tree-optimization/43801 * cgraph.c (cgraph_create_virtual_clone): Clear DECL_SECTION_NAME if old_decl was DECL_ONE_ONLY. * g++.dg/torture/pr43801.C: New test. From-SVN: r161564
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/cgraph.c2
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/torture/pr43801.C22
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f80c207..11d901d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2010-06-29 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/43801
+ * cgraph.c (cgraph_create_virtual_clone): Clear DECL_SECTION_NAME
+ if old_decl was DECL_ONE_ONLY.
+
PR debug/44668
* dwarf2out.c (add_accessibility_attribute): New function.
(gen_subprogram_die, gen_variable_die, gen_field_die): Use it
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index b63bf31..aaa50b6 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -2217,6 +2217,8 @@ cgraph_create_virtual_clone (struct cgraph_node *old_node,
??? We cannot use COMDAT linkage because there is no
ABI support for this. */
DECL_EXTERNAL (new_node->decl) = 0;
+ if (DECL_ONE_ONLY (old_decl))
+ DECL_SECTION_NAME (new_node->decl) = NULL;
DECL_COMDAT_GROUP (new_node->decl) = 0;
TREE_PUBLIC (new_node->decl) = 0;
DECL_COMDAT (new_node->decl) = 0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fa8f96b..9fbbaf4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2010-06-29 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/43801
+ * g++.dg/torture/pr43801.C: New test.
+
PR debug/44668
* g++.dg/debug/dwarf2/accessibility1.C: New test.
diff --git a/gcc/testsuite/g++.dg/torture/pr43801.C b/gcc/testsuite/g++.dg/torture/pr43801.C
new file mode 100644
index 0000000..3b52d4a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr43801.C
@@ -0,0 +1,22 @@
+// PR tree-optimization/43801
+// { dg-do compile }
+// { dg-options "-fipa-cp -fipa-cp-clone" }
+
+struct A
+{
+ virtual void f (int);
+};
+struct B : virtual A
+{
+ virtual void f (int i) { if (i) A::f(0); }
+};
+struct C : virtual B
+{
+ virtual void f (int) { B::f(0); }
+};
+
+void
+foo ()
+{
+ C ();
+}