diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d02c8df3eb2..88b45d8fffe 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-12-12 Jakub Jelinek + + PR middle-end/51510 + * calls.c (internal_arg_pointer_based_exp_scan): Don't use + VEC_safe_grow_cleared if idx is smaller than VEC_length. + 2011-12-12 Richard Sandiford PR middle-end/50873 diff --git a/gcc/calls.c b/gcc/calls.c index 95369b7baef..0ef0cad8d27 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1705,9 +1705,11 @@ internal_arg_pointer_based_exp_scan (void) val = internal_arg_pointer_based_exp (SET_SRC (set), false); if (val != NULL_RTX) { - VEC_safe_grow_cleared (rtx, heap, - internal_arg_pointer_exp_state.cache, - idx + 1); + if (idx + >= VEC_length (rtx, internal_arg_pointer_exp_state.cache)) + VEC_safe_grow_cleared (rtx, heap, + internal_arg_pointer_exp_state.cache, + idx + 1); VEC_replace (rtx, internal_arg_pointer_exp_state.cache, idx, val); }