diff options
author | Jan Hubicka <jh@suse.cz> | 2011-06-04 20:00:47 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2011-06-04 18:00:47 +0000 |
commit | a45c05572191ff9fe6b0f260008a4408453d6a7f (patch) | |
tree | 476529c301eab3847fc3d9016c03f7c11a2de064 /gcc/ipa-inline-analysis.c | |
parent | 6c6424b3d7fc813396ee33d3d1ebb65d210aecc5 (diff) | |
download | gcc-a45c05572191ff9fe6b0f260008a4408453d6a7f.zip gcc-a45c05572191ff9fe6b0f260008a4408453d6a7f.tar.gz gcc-a45c05572191ff9fe6b0f260008a4408453d6a7f.tar.bz2 |
re PR middle-end/48893 (ICE in evaulate_conditions_for_edge at ipa-inline-analysis.c:477)
PR tree-optimization/48893
PR tree-optimization/49091
PR tree-optimization/49179
* ipa-inline-analysis.c (evaluate_conditions_for_known_args):
Bounds check.
* gfortran.dg/pr49179.f90: New testcase
From-SVN: r174648
Diffstat (limited to 'gcc/ipa-inline-analysis.c')
-rw-r--r-- | gcc/ipa-inline-analysis.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c index 45bfeb6..ccda67d 100644 --- a/gcc/ipa-inline-analysis.c +++ b/gcc/ipa-inline-analysis.c @@ -555,9 +555,17 @@ evaluate_conditions_for_known_args (struct cgraph_node *node, for (i = 0; VEC_iterate (condition, info->conds, i, c); i++) { - tree val = VEC_index (tree, known_vals, c->operand_num); + tree val; tree res; + /* We allow call stmt to have fewer arguments than the callee + function (especially for K&R style programs). So bound + check here. */ + if (c->operand_num < (int)VEC_length (tree, known_vals)) + val = VEC_index (tree, known_vals, c->operand_num); + else + val = NULL; + if (!val) { clause |= 1 << (i + predicate_first_dynamic_condition); |