https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
--- Comment #23 from qinzhao at gcc dot gnu.org --- (In reply to Martin Uecker from comment #13) > > VLAs and VM types exist since C99 and were made optional in C11. > The minimal change we adopted to make support for VM types > (but not VLAs) mandatory again was: > > https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2778.pdf So, this will be official in C23? i.e, VM types will be mandatory, but VLA will be optional (and later might be deprecated?) > > I think using PLACEHOLDER_EXPR that are insert into the size > expression and then replaced later by the struct being accessed, > e.g. > > struct foo { > int len; > char buf[PLACEHOLDER_EXPR.len] > }; > > and then later when we have > > struct foo x; > > x->buf > > we would replace in the size of the type for x->buf the placeholder > with x itself. I see. Yes, this will resolve the implementation difficulty for filling the size of the FAM field when the size is the previous declared field in the same structure. > Yes, this was what I wanted to do... My main use case is not flexible > array members but VM types in struct: > > struct foo { > int len; > char (*buf)[.len]; > }; > > > This has less issues because the size of the struct then does not depend > on the length. a little confused here: what's the definition of VM type? it's size will not depend on the ".len" ?