Re: [PATCH] Various pages: SYNOPSIS: Use VLA syntax in function parameters

Martin Uecker
2022-11-10T06:29:23Z

Am Donnerstag, den 10.11.2022, 01:39 +0000 schrieb Joseph Myers:
> On Thu, 10 Nov 2022, Joseph Myers wrote:
>
> > On Thu, 10 Nov 2022, Alejandro Colomar via Gcc wrote:
> >
> > > I've shown the three kinds of prototypes that have been changed:
> > >
> > > - Normal VLA; nothing fancy except for the '.'.
> > > - Complex size expressions.
> > > - 'void *' VLAs (assuming GNU conventions: sizeof(void *)==1).
> >
> > That doesn't cover any of the tricky issues with such proposals, such as
> > the choice of which entity is referred to by the parameter name when there
> > are multiple nested parameter lists that use the same parameter name, or
> > when the identifier is visible from an outer scope (including in
> > particular the case where it's declared as a typedef name in an outer
> > scope).
>
> In fact I can't tell from these examples whether you mean for a '.' token
> after '[' to have special semantics, or whether you mean to have a special
> '. identifier' form of expression valid in certain context (each of which
> introduces its own complications; for the former, typedef names from outer
> scopes are problematic; for the latter, it's designated initializers where
> you get complications, for example). Designing new syntax that doesn't
> cause ambiguity is generally tricky, and this sort of language extension
> is the kind of thing where you'd expect to so through at least five
> iterations of a WG14 paper before you have something like a sound
> specification.

I am not sure what Alejandro has in mind exactly, but my idea of using
a new notation [.identifier] would be to limit it to accessing other
parameter names in the same parameter list only, so that there is

1) no ambiguity what is referred to and
2) one can access parameters which come later

If we want to specify something like this, I think we should also
restrict what kind of expressions one allows, e.g. it has to
be side-effect free. But maybe we want to make this even more
restrictive (at least initially).

One problem with WG14 papers is that people put in too much,
because the overhead is so high and the standard is not updated
very often. It would be better to build such feature more
incrementally, which could be done more easily with a compiler
extension. One could start supporting just [.x] but not more
complicated expressions.

Later WG14 can still accept or reject or modify this proposal
based on the experience we get.

(I would also be happy with using GNU forward declarations, and
I am not sure why people dislike them so much.)

Martin