From 087fa34bad4ee46be9cd53314161239ad75b0743 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 29 Jun 2010 21:46:05 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 4 ++++ gcc/cgraph.c | 2 ++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/torture/pr43801.C | 22 ++++++++++++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 gcc/testsuite/g++.dg/torture/pr43801.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f80c207f761..11d901d8f61 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2010-06-29 Jakub Jelinek + 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 b63bf314a12..aaa50b607d2 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 fa8f96bbfac..9fbbaf43b93 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2010-06-29 Jakub Jelinek + 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 00000000000..3b52d4abcc6 --- /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 (); +} -- 2.30.2