From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Keven Boell <keven.boell@linux.intel.com>
Cc: Keven Boell <keven.boell@intel.com>,
gdb-patches@sourceware.org, sanimir.agovic@intel.com
Subject: Re: [PATCH 04/23] vla: make dynamic fortran arrays functional.
Date: Tue, 17 Jun 2014 17:26:00 -0000 [thread overview]
Message-ID: <20140617172611.GA5176@host2.jankratochvil.net> (raw)
In-Reply-To: <53A04723.8050802@linux.intel.com>
[-- Attachment #1: Type: text/plain, Size: 2879 bytes --]
On Tue, 17 Jun 2014 15:48:19 +0200, Keven Boell wrote:
> Am 16.06.2014 23:02, schrieb Jan Kratochvil:
> > 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'.
>
> This change just adds some more information for the already existing
> "no such vector element" message. To me the change you are describing
> sounds more like a generic fix for this function or am I wrong?
I am not sure if the fix I suggest belongs to this patch series part but it
definitely belongs to this patch series. Beforehand if this function
value_subscripted_rvalue was called the parameter 'lowerbound' had to be
always valid. But by introducting the TYPE_NOT_ALLOCATED functionality
'lowerbound' can be passed invalid and so GDB should not touch it if the
array/type is TYPE_NOT_ALLOCATED.
Otherwise this patchset has a regression against my former VLA patchset on
unallocated Fortran arrays where instead of expected
no such vector element because not allocated
it sometimes - depending on what is read from uninitialized inferior memory,
therefore not always - prints instead:
Value out of range.
I had to apply the attached fix.
I am not completely sure this is the right fix - IMO when the array is not
allocated GDB should not try to read the array bound(s) from inferior memory
as there is an undefined value that time.
Jan
[-- Attachment #2: intelvlarvalue.patch --]
[-- Type: text/plain, Size: 1805 bytes --]
--- ./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);
next prev parent reply other threads:[~2014-06-17 17:26 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-04 5:54 [PATCH 00/23] Fortran dynamic array support Keven Boell
2014-06-04 5:54 ` [PATCH 11/23] vla: add stride support to fortran arrays Keven Boell
2014-06-04 5:54 ` [PATCH 23/23] test: stride support for dynamic arrays Keven Boell
2014-06-04 5:54 ` [PATCH 04/23] vla: make dynamic fortran arrays functional Keven Boell
2014-06-16 21:02 ` Jan Kratochvil
2014-06-17 13:53 ` Keven Boell
2014-06-17 17:26 ` Jan Kratochvil [this message]
2014-06-04 5:54 ` [PATCH 08/23] vla: get dynamic array corner cases to work Keven Boell
2014-06-04 5:54 ` [PATCH 15/23] test: dynamic arrays passed to subroutines Keven Boell
2014-06-04 5:54 ` [PATCH 20/23] test: dynamic string evaluations Keven Boell
2014-06-16 18:41 ` Jan Kratochvil
2014-06-17 13:52 ` Keven Boell
2014-06-04 5:54 ` [PATCH 13/23] test: evaluate Fortran dynamic arrays of types Keven Boell
2014-06-16 20:57 ` Jan Kratochvil
2014-06-04 5:54 ` [PATCH 06/23] vla: reconstruct value to compute bounds of target type Keven Boell
2014-06-04 5:54 ` [PATCH 05/23] vla: make field selection work with vla Keven Boell
2014-06-04 5:54 ` [PATCH 03/23] vla: introduce allocated/associated flags Keven Boell
2014-06-04 5:54 ` [PATCH 16/23] test: correct ptype of dynamic arrays in Fortran Keven Boell
2014-06-04 5:54 ` [PATCH 14/23] test: evaluate dynamic arrays using Fortran primitives Keven Boell
2014-06-04 5:54 ` [PATCH 10/23] vla: get Fortran dynamic strings working Keven Boell
2014-06-04 5:54 ` [PATCH 12/23] test: basic tests for dynamic array evaluations in Fortran Keven Boell
2014-06-04 5:54 ` [PATCH 07/23] vla: use value constructor instead of raw-buffer manipulation Keven Boell
2014-06-04 5:55 ` [PATCH 01/23] dwarf: add dwarf3 DW_OP_push_object_address opcode Keven Boell
2014-06-05 20:47 ` Tom Tromey
2014-06-11 12:30 ` Keven Boell
2014-06-10 9:54 ` Joel Brobecker
2014-06-11 12:26 ` Keven Boell
2014-06-11 13:08 ` Joel Brobecker
2014-06-12 7:57 ` Keven Boell
2014-06-12 15:47 ` Joel Brobecker
2014-06-17 13:52 ` Keven Boell
2014-06-21 15:21 ` Joel Brobecker
2014-07-07 15:29 ` Joel Brobecker
2014-06-04 5:55 ` [PATCH 22/23] test: test sizeof for dynamic fortran arrays Keven Boell
2014-06-04 5:55 ` [PATCH 18/23] test: dynamic arrays passed to functions Keven Boell
2014-06-04 5:55 ` [PATCH 19/23] test: accessing dynamic array history values Keven Boell
2014-06-04 5:55 ` [PATCH 21/23] test: basic MI test for the dynamic array support Keven Boell
2014-06-04 5:55 ` [PATCH 09/23] vla: changed string length semantic Keven Boell
2014-06-04 5:55 ` [PATCH 02/23] dwarf: add DW_AT_data_location support Keven Boell
2014-06-10 12:10 ` Joel Brobecker
2014-06-11 12:29 ` Keven Boell
2014-06-14 13:21 ` Jan Kratochvil
2014-06-04 5:55 ` [PATCH 17/23] test: evaluating allocation/association status Keven Boell
2014-06-04 7:10 ` [PATCH 00/23] Fortran dynamic array support Eli Zaretskii
2014-06-04 12:50 ` Joel Brobecker
2014-06-14 18:57 ` Jan Kratochvil
2014-06-14 19:39 ` Jan Kratochvil
2014-06-17 13:54 ` Keven Boell
2014-06-17 17:20 ` Jan Kratochvil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140617172611.GA5176@host2.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=keven.boell@intel.com \
--cc=keven.boell@linux.intel.com \
--cc=sanimir.agovic@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox