--- ./gdb/valarith.c 2014-06-17 19:05:09.286336188 +0200 +++ ./gdb/valarith.c 2014-06-17 19:14:46.752072463 +0200 @@ -195,10 +195,19 @@ value_subscripted_rvalue (struct value * struct type *array_type = check_typedef (value_type (array)); struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); unsigned int elt_size = TYPE_LENGTH (elt_type); - unsigned int elt_offs = longest_to_int (index - lowerbound); + unsigned int elt_offs; LONGEST elt_stride = TYPE_BYTE_STRIDE (TYPE_INDEX_TYPE (array_type)); struct value *v; + if (TYPE_NOT_ASSOCIATED (array_type)) + error (_("no such vector element because not associated")); + if (TYPE_NOT_ALLOCATED (array_type)) + error (_("no such vector element because not allocated")); + + if (index < lowerbound || (int) (index - lowerbound) != index - lowerbound) + error (_("no such vector element")); + elt_offs = longest_to_int (index - lowerbound); + if (elt_stride > 0) elt_offs *= elt_stride; else if (elt_stride < 0) @@ -210,16 +219,9 @@ value_subscripted_rvalue (struct value * else elt_offs *= elt_size; - if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) - && elt_offs >= TYPE_LENGTH (array_type))) - { - if (TYPE_NOT_ASSOCIATED (array_type)) - error (_("no such vector element because not associated")); - else if (TYPE_NOT_ALLOCATED (array_type)) - error (_("no such vector element because not allocated")); - else - error (_("no such vector element")); - } + if (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) + && elt_offs >= TYPE_LENGTH (array_type)) + error (_("no such vector element")); if (VALUE_LVAL (array) == lval_memory && value_lazy (array)) v = allocate_value_lazy (elt_type);