diff options
author | Martin Jambor <mjambor@suse.cz> | 2014-02-20 14:28:34 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2014-02-20 14:28:34 +0100 |
commit | 9576e7b112cad4adb1f9f37d913b7161640808d8 (patch) | |
tree | 699126c52bfe135022200efb89c4768b0d92bd72 | |
parent | 8c4d420528baa5e14f0519efd658240e8ad3961c (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ipa-cp.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ipa/pr55260.c | 38 |
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); +} |