https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114713
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Also note that people might find it reasonable to access struct { int n; int a[4]; } a = { 4, }; via struct X { int n; int a[] } *p; The fortran frontend goes some lengths to make this work for array descriptors statically allocated by accessing the storage always via the type with the flexible array member. But that also relies on GCC middle-end semantics, accessing an automatic variable with a declared type via a not compatible type, thus changing its effective type. The only valid C way is to resort to dynamic (stack) allocation.