This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 04/23] vla: make dynamic fortran arrays functional.
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: Keven Boell <keven dot boell at intel dot com>
- Cc: gdb-patches at sourceware dot org, sanimir dot agovic at intel dot com
- Date: Mon, 16 Jun 2014 23:02:29 +0200
- Subject: Re: [PATCH 04/23] vla: make dynamic fortran arrays functional.
- Authentication-results: sourceware.org; auth=none
- References: <1401861266-6240-1-git-send-email-keven dot boell at intel dot com> <1401861266-6240-5-git-send-email-keven dot boell at intel dot com>
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