This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [PATCH 05/10] vla: allow side effects for sizeof argument


Thanks for your review.

I avoid to re-send the complete patch series, thus see my 
alternative proposal below. Once I receive more feedback
I will re-publish my patch series including this fix if 
applicable.

Meanwhile you can track our latest development efforts on
http://intel-gdb.github.io/ branch vla-c99.

 -Sanimir

    vla: allow side effects for subscripts in the sizeof operator

    C99 requires the sizeof operator to be evaluated at runtime to retrieve
    the size of the vla, reflect this behavior in gdb.

    1| void foo (size_t n, int vla[n][n]) {
    2| }

    (gdb) p sizeof(vla[0])

    yields N.

    2013-10-18  Sanimir Agovic  <sanimir.agovic@intel.com>
                Keven Boell  <keven.boell@intel.com>

        * eval.c (evaluate_subexp_for_sizeof): Allow side effects for
        subscripts in the sizeof operator.

    Change-Id: I945e8a259e850cc0470faa742a0d2191122ef37b

diff --git a/gdb/eval.c b/gdb/eval.c
index ab3cb95..255ea09 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -3054,6 +3054,13 @@ evaluate_subexp_for_sizeof (struct expression *exp, int *pos)
       return
        value_from_longest (size_type, (LONGEST) TYPE_LENGTH (type));

+    case BINOP_SUBSCRIPT:
+      /* In case of a variable length array we need to evaluate the subscript
+        with side effects to correcly infere the size.  */
+      val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
+      return value_from_longest (size_type,
+                                (LONGEST) TYPE_LENGTH (value_type (val)));
+
     default:
       val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
       return value_from_longest (size_type,

> -----Original Message-----
> From: Tom Tromey [mailto:tromey@redhat.com]
> Sent: Thursday, October 24, 2013 09:55 PM
> To: Agovic, Sanimir
> Cc: gdb-patches@sourceware.org
> Subject: Re: [PATCH 05/10] vla: allow side effects for sizeof argument
> 
> >>>>> "Sanimir" == Sanimir Agovic <sanimir.agovic@intel.com> writes:
> 
> Sanimir> C99 requires the sizeof operator to be evaluated at runtime to compute
> Sanimir> the size of the vla, reflect this behavior in gdb.
> 
> Sanimir> -      val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
> Sanimir> +      val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
> 
> I think this will do the wrong thing for cases like (assuming "int x"):
> 
>     (gdb) print sizeof (x++)
> 
> I think some other approach will be needed for this patch.
> 
> Tom
Intel GmbH
Dornacher Strasse 1
85622 Feldkirchen/Muenchen, Deutschland
Sitz der Gesellschaft: Feldkirchen bei Muenchen
Geschaeftsfuehrer: Christian Lamprechter, Hannes Schwaderer, Douglas Lusk
Registergericht: Muenchen HRB 47456
Ust.-IdNr./VAT Registration No.: DE129385895
Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]