Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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);

  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