aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2014-02-20 14:28:34 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2014-02-20 14:28:34 +0100
commit9576e7b112cad4adb1f9f37d913b7161640808d8 (patch)
tree699126c52bfe135022200efb89c4768b0d92bd72
parent8c4d420528baa5e14f0519efd658240e8ad3961c (diff)
downloadgcc-9576e7b112cad4adb1f9f37d913b7161640808d8.zip
gcc-9576e7b112cad4adb1f9f37d913b7161640808d8.tar.gz
gcc-9576e7b112cad4adb1f9f37d913b7161640808d8.tar.bz2
re PR tree-optimization/55260 (ICE: in ipa_get_parm_lattices, at ipa-cp.c:263 with -O2 -fno-inline -fipa-cp-clone)
2014-02-20 Martin Jambor <mjambor@suse.cz> PR ipa/55260 * ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Uce correct info when checking whether lattices are bottom. testsuite/ * gcc.dg/ipa/pr55260.c: New test. From-SVN: r207941
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa-cp.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pr55260.c38
4 files changed, 52 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a5c8332..805a561 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-20 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/55260
+ * ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Uce correct
+ info when checking whether lattices are bottom.
+
2014-02-20 Richard Biener <rguenther@suse.de>
PR middle-end/60221
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index f7cf716..9bcd02c 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -3256,6 +3256,7 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
struct cgraph_node *node)
{
struct ipa_node_params *orig_caller_info = IPA_NODE_REF (cs->caller);
+ struct ipa_node_params *orig_node_info;
struct ipa_agg_replacement_value *aggval;
int i, ec, count;
@@ -3270,6 +3271,7 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
if (aggval->index >= ec)
return false;
+ orig_node_info = IPA_NODE_REF (IPA_NODE_REF (node)->ipcp_orig_node);
if (orig_caller_info->ipcp_orig_node)
orig_caller_info = IPA_NODE_REF (orig_caller_info->ipcp_orig_node);
@@ -3287,7 +3289,7 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
if (!interesting)
continue;
- plats = ipa_get_parm_lattices (orig_caller_info, aggval->index);
+ plats = ipa_get_parm_lattices (orig_node_info, aggval->index);
if (plats->aggs_bottom)
return false;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fb0ffc1..9331b75 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-02-20 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/55260
+ * gcc.dg/ipa/pr55260.c: New test.
+
2014-02-20 Bin Cheng <bin.cheng@arm.com>
* gcc.dg/tree-prof/crossmodule-indircall-1.c: Return 0
diff --git a/gcc/testsuite/gcc.dg/ipa/pr55260.c b/gcc/testsuite/gcc.dg/ipa/pr55260.c
new file mode 100644
index 0000000..ef151b0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr55260.c
@@ -0,0 +1,38 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-inline -fipa-cp-clone" } */
+
+typedef struct {
+ int *ptr;
+ int len;
+} string;
+typedef struct {
+ string nantstr;
+ int *nant;
+} malv;
+typedef struct {
+ int *nor;
+} list_heads;
+int b;
+list_heads *fn1(string, int *, unsigned);
+void fn2(malv *p1, list_heads *p2, unsigned p3) {
+ string a = p1->nantstr;
+ fn1(a, p1->nant, p3);
+}
+
+void fn3(unsigned p1) { fn2(0, 0, p1); }
+
+list_heads *fn1(string p1, int *p2, unsigned p3) {
+ while (1) {
+ if (p3)
+ fn3(1);
+ if (b)
+ return 0;
+ fn3(1);
+ }
+}
+
+void fn5() {
+ list_heads c;
+ c.nor = 0;
+ fn2(0, &c, 1);
+}