@@ -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);