aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2019-11-25 11:09:42 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2019-11-25 11:09:42 +0100
commited649cda944c2ff0b77f0203bf83f106e930c5e8 (patch)
treed1cb5d2e303d82acf499b8d891ab40e4e3abcef7 /gcc
parent5b01f1a57cc90bcee58ccf75e6062748e1d66448 (diff)
downloadgcc-ed649cda944c2ff0b77f0203bf83f106e930c5e8.zip
gcc-ed649cda944c2ff0b77f0203bf83f106e930c5e8.tar.gz
gcc-ed649cda944c2ff0b77f0203bf83f106e930c5e8.tar.bz2
Make IPA-SRA follow comdat-local rules (PR 91956)
2019-11-25 Martin Jambor <mjambor@suse.cz> PR ipa/91956 * ipa-sra.c (process_isra_node_results): Put the new node to the same comdat group as the original node. testsuite/ * g++.dg/ipa/pr91956.C: New test. From-SVN: r278669
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa-sra.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ipa/pr91956.C27
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 25adf2e..a15cc75 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-11-25 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/91956
+ * ipa-sra.c (process_isra_node_results): Put the new node to the
+ same comdat group as the original node.
+
2019-11-25 Georg-Johann Lay <avr@gjlay.de>
Build double32 / long-double32 multilibs if needed.
diff --git a/gcc/ipa-sra.c b/gcc/ipa-sra.c
index 08606ae..c6ed0f4 100644
--- a/gcc/ipa-sra.c
+++ b/gcc/ipa-sra.c
@@ -3759,6 +3759,9 @@ process_isra_node_results (cgraph_node *node,
= node->create_virtual_clone (callers, NULL, new_adjustments, "isra",
suffix_counter);
suffix_counter++;
+ if (node->same_comdat_group)
+ new_node->add_to_same_comdat_group (node);
+ new_node->calls_comdat_local = node->calls_comdat_local;
if (dump_file)
fprintf (dump_file, " Created new node %s\n", new_node->dump_name ());
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9ff8a95..ce59906 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-25 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/91956
+ * g++.dg/ipa/pr91956.C: New test.
+
2019-11-23 Thomas Koenig <tkoenig@gcc.gnu.org>
Harald Anlauf <anlauf@gmx.de>
diff --git a/gcc/testsuite/g++.dg/ipa/pr91956.C b/gcc/testsuite/g++.dg/ipa/pr91956.C
new file mode 100644
index 0000000..6f6edc3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr91956.C
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-options "-Os -std=c++11 -fno-strict-aliasing -fno-tree-fre -fno-tree-vrp" } */
+
+int count = 0;
+struct VB
+{
+ VB() {++count;}
+};
+
+struct B : virtual VB
+{
+ B() : B(42) {}
+ B(int) {}
+};
+
+struct D : B
+{
+ D() {}
+ D(int) : D() {}
+};
+
+int main()
+{
+ D d{42};
+ if (count != 1)
+ __builtin_abort();
+}