On Thu, May 11, 2023 at 08:53:52PM +0000, Joseph Myers wrote: > On Thu, 11 May 2023, Kees Cook via Gcc wrote: > > > On Thu, May 11, 2023 at 06:29:10PM +0200, Alejandro Colomar wrote: > > > On 5/11/23 18:07, Alejandro Colomar wrote: > > > [...] > > > > Would you allow flexible array members in unions? Is there any > > > > strong reason to disallow them? > > > > Yes please!! And alone in a struct, too. > > > > AFAICT, there is no mechanical/architectural reason to disallow them > > (especially since they _can_ be constructed with some fancy tricks, > > and they behave as expected.) My understanding is that it's disallowed > > due to an overly strict reading of the very terse language that created > > flexible arrays in C99. > > Standard C has no such thing as a zero-size object or type, which would > lead to problems with a struct or union that only contains a flexible > array member there.
Ah-ha, okay. That root cause makes sense now. Why are zero-sized objects missing in Standard C? Or, perhaps, the better question is: what's needed to support the idea of a zero-sized object? -- Kees Cook