From 9576e7b112cad4adb1f9f37d913b7161640808d8 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Thu, 20 Feb 2014 14:28:34 +0100 Subject: [PATCH] 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 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 | 6 ++++++ gcc/ipa-cp.c | 4 +++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/ipa/pr55260.c | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/ipa/pr55260.c 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 + + 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 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 + + PR ipa/55260 + * gcc.dg/ipa/pr55260.c: New test. + 2014-02-20 Bin Cheng * 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); +} -- 2.7.4