re PR tree-optimization/55260 (ICE: in ipa_get_parm_lattices, at ipa-cp.c:263 with...
authorMartin Jambor <mjambor@suse.cz>
Thu, 20 Feb 2014 13:28:34 +0000 (14:28 +0100)
committerMartin Jambor <jamborm@gcc.gnu.org>
Thu, 20 Feb 2014 13:28:34 +0000 (14:28 +0100)
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

gcc/ChangeLog
gcc/ipa-cp.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/ipa/pr55260.c [new file with mode: 0644]

index a5c8332..805a561 100644 (file)
@@ -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
index f7cf716..9bcd02c 100644 (file)
@@ -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;
 
index fb0ffc1..9331b75 100644 (file)
@@ -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 (file)
index 0000000..ef151b0
--- /dev/null
@@ -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);
+}