https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68649
Thomas Koenig <tkoenig at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pault at gcc dot gnu.org --- Comment #22 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- What we _could_ do with our array descriptors is to cast them to a pointer containing a flexible array member, i.e. struct type_descr { type *base_addr; size_t offset; dtype_type dtype; index_type span; descriptor_dimension dim[]; } which would make all our function calls equal. I have lightly tested the concept with a C program, i.e. foo.c: struct Xflex { int n; int a[]; }; int foo (struct Xflex *f) { int i; int s; s = 0; for (i=0; i<f->n; i++) s += f->a[i]; return s; } bar.c: #include <stdio.h> struct Xflex { int n; int a[]; }; struct X2 { int n; int a[2]; }; struct X2 x; int foo (struct Xflex *f); int main(void) { x.n = 2; x.a[0] = 1; x.a[1] = 3; printf("%d\n", foo((struct Xflex *) &x)); } which seems to work.