Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: gdb-patches@sources.redhat.com
Subject: Re: [RFA] print arrays with indexes
Date: Tue, 04 Oct 2005 07:41:00 -0000	[thread overview]
Message-ID: <20051004074134.GB8849@adacore.com> (raw)
In-Reply-To: <20051004070220.GZ8849@adacore.com>

[-- Attachment #1: Type: text/plain, Size: 1410 bytes --]

BTW, I forgot to mention a couple of things regarding:

> 2. More annoying, I just tried something else, which is to print an
>    empty Ada array. Ada allows you to create this by using declarations
>    such as this:
> 
>         Table : array (1 .. 0) of Integer;
> 
>    Basically, if the lower/left bound is greater than the right/higher
>    bound, then the array is empty.
> 
>    I just discovered that ada_val_print_1 calls val_print_array_elements
>    even if the array is empty.  This triggers one of the guards in
>    get_array_low_bound(), since the function expects a non-empty array.
> 
>    I'm happy to just put a check in the Ada part to avoid calling
>    val_print_array_elements for empty arrays. This should be fine, but
>    I'm wondering if other languages might be doing the same, in which
>    case it's probably going to be safer to modify a bit
>    val_print_array_elements to handle empty arrays...

  a. I tried with a C example, something like this:

        int table [] = {};

     And verified that GDB worked correctly (printed the address
     of the array, but no value). So there is no issue with C,
     at least. Don't have a pascal compiler handy, though.

  b. I prefer the second approach. It just feels safer and more elegant.
     In fact I just finished testing the attached patch. I will submit
     a proper patch together with a testcase tomorrow.

-- 
Joel

[-- Attachment #2: valprint.c.diff --]
[-- Type: text/plain, Size: 1225 bytes --]

Index: valprint.c
===================================================================
RCS file: /cvs/src/src/gdb/valprint.c,v
retrieving revision 1.55
diff -u -p -r1.55 valprint.c
--- valprint.c	3 Oct 2005 21:21:20 -0000	1.55
+++ valprint.c	4 Oct 2005 07:40:59 -0000
@@ -959,19 +959,21 @@ val_print_array_elements (struct type *t
   unsigned int rep1;
   /* Number of repetitions we have detected so far.  */
   unsigned int reps;
-  long low_bound_index;
-
-  if (!get_array_low_bound (type, &low_bound_index))
-    {
-      warning ("unable to get low bound of array, using zero as default");
-      low_bound_index = 0;
-    }
+  long low_bound_index = 0;
 
   elttype = TYPE_TARGET_TYPE (type);
   eltlen = TYPE_LENGTH (check_typedef (elttype));
   len = TYPE_LENGTH (type) / eltlen;
   index_type = TYPE_INDEX_TYPE (type);
 
+  /* Get the array low bound.  This only makes sense if the array
+     has one or more element in it.  */
+  if (len > 0 && !get_array_low_bound (type, &low_bound_index))
+    {
+      warning ("unable to get low bound of array, using zero as default");
+      low_bound_index = 0;
+    }
+
   annotate_array_section_begin (i, elttype);
 
   for (; i < len && things_printed < print_max; i++)

  reply	other threads:[~2005-10-04  7:41 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-06 20:20 [RFC/RFA] " Joel Brobecker
2005-09-06 20:57 ` Daniel Jacobowitz
2005-09-07  5:40   ` Joel Brobecker
2005-09-07 13:23     ` Daniel Jacobowitz
2005-09-07 20:24       ` Joel Brobecker
2005-09-14 17:13         ` [RFA] " Joel Brobecker
2005-09-17 20:49           ` Daniel Jacobowitz
2005-09-17 21:51             ` Joel Brobecker
2005-09-17 22:07               ` Daniel Jacobowitz
2005-09-18  3:37               ` Eli Zaretskii
2005-09-18  3:46                 ` Daniel Jacobowitz
2005-09-18  5:41                   ` Joel Brobecker
2005-09-18 19:08                     ` Eli Zaretskii
2005-09-18 19:19                       ` Daniel Jacobowitz
2005-09-18 20:05                         ` Eli Zaretskii
2005-09-20  7:31                           ` Joel Brobecker
2005-09-20 19:18                             ` Eli Zaretskii
2005-09-20 19:31                               ` Joel Brobecker
2005-09-20 19:33                                 ` Daniel Jacobowitz
2005-09-20 19:39                                   ` Joel Brobecker
2005-09-21  3:44                                     ` Eli Zaretskii
2005-09-22 16:47                                     ` Joel Brobecker
2005-09-26  1:23                                       ` Daniel Jacobowitz
2005-09-27  1:04                                         ` Joel Brobecker
2005-10-02 22:42                                           ` Daniel Jacobowitz
2005-10-03  6:17                                             ` Joel Brobecker
2005-10-03 15:50                                               ` Daniel Jacobowitz
2005-10-03 21:23                                                 ` Joel Brobecker
2005-10-04  7:02                                               ` Joel Brobecker
2005-10-04  7:41                                                 ` Joel Brobecker [this message]
2005-09-21  3:44                                 ` Eli Zaretskii
2005-09-18  8:53                 ` Mark Kettenis
2005-09-18 19:10                   ` Eli Zaretskii
2005-09-07 20:39       ` [RFC/RFA] " Jim Blandy
2005-09-07 21:41         ` Joel Brobecker
2005-09-09 19:14           ` Jim Blandy
2005-09-06 21:45 ` Jim Blandy

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=20051004074134.GB8849@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sources.redhat.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