This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] fix wrong gimple code with ptr to forward vla
On Mon, 25 Sep 2006, Olivier Hainque wrote:
> * c-decl.c (grokdeclarator) [cdk_pointer]: If the pointed-to type
> is anonymous and involves components of variable size, build an
> artificial TYPE_DECL for it to force the size evaluation at the
> pointer declaration point.
The pointer declaration point is in general in the middle of an
expression. This patch breaks
extern void abort (void);
extern void exit (int);
int
main (void)
{
int a = 1;
if (sizeof (*(++a, (char (*)[a])0)) != 2)
abort ();
exit (0);
}
where simply inserting a declaration before the containing expression
won't work.
This patch might be safer if the TYPE_DECL were only inserted in the case
of decl_context == NORMAL. That should avoid the TYPENAME problems like
the testcase I give (which should be added to the gcc.c-torture/execute
testsuite) and also avoid possible problems with PARM (where in the case
of declarations that aren't definitions, no special handling should be
needed, and in the case of those that are definitions, gimplify_parameters
should arrange the necessary evaluation of array sizes).
--
Joseph S. Myers
joseph@codesourcery.com