Re: [PATCH 04/23] vla: make dynamic fortran arrays functional.

Jan Kratochvil
2014-06-16T21:02:38Z

On Wed, 04 Jun 2014 07:54:07 +0200, Keven Boell wrote:
> diff --git a/gdb/valarith.c b/gdb/valarith.c
> index 8e863e3..bddb9db 100644
> --- a/gdb/valarith.c
> +++ b/gdb/valarith.c
> @@ -200,7 +200,14 @@ value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound)
>
> if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type)
> && elt_offs >= TYPE_LENGTH (array_type)))
> - error (_("no such vector element"));
> + {
> + 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 (VALUE_LVAL (array) == lval_memory && value_lazy (array))
> v = allocate_value_lazy (elt_type);

I find here the patch is incomplete. Earlier this function has:
unsigned int elt_offs = elt_size * longest_to_int (index - lowerbound);

and in some cases - specifically with the 64-bit inferior objects patch, the
*bitpos* patches from:
http://pkgs.fedoraproject.org/cgit/gdb.git/tree/
one occasionally gets for TYPE_NOT_ALLOCATED inferior variables:
Value out of range.
instead of the more correct:
no such vector element because not allocated

Because for TYPE_NOT_ALLOCATED inferior variable the LOWERBOUND value read
from the inferior is bogus and 'index - lowerbound' will not fit in 'int'.

Thanks,
Jan