This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
RE: [PATCH 05/10] vla: allow side effects for sizeof argument
- From: "Agovic, Sanimir" <sanimir dot agovic at intel dot com>
- To: 'Tom Tromey' <tromey at redhat dot com>
- Cc: "gdb-patches at sourceware dot org" <gdb-patches at sourceware dot org>
- Date: Fri, 25 Oct 2013 08:13:43 +0000
- Subject: RE: [PATCH 05/10] vla: allow side effects for sizeof argument
- Authentication-results: sourceware.org; auth=none
- References: <1382366424-21010-1-git-send-email-sanimir dot agovic at intel dot com> <1382366424-21010-6-git-send-email-sanimir dot agovic at intel dot com> <87d2mua1gi dot fsf at fleche dot redhat dot com>
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