On Thu, Apr 14, 2016 at 12:25 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Thu, Apr 14, 2016 at 12:19:26PM +0100, Ramana Radhakrishnan wrote: >> Is this a valid example for what you have in mind ? >> >> struct baz >> { >> char a[1024]; >> }; >> struct foo : baz >> { >> }; >> >> int bar (struct foo b, int x) > > No, I meant say: > struct A {}; > struct B { A a[1024]; }; > int bar (struct B b, int c) > { > return c; > } > int baz (int a, int b, int c, int d, int e, int f, int g, struct B h, int i) > { > return g + i; > } > > Strangely, we warn about this with -Wabi=9 even on x86_64-linux on both > testcases, while only on baz it actually changes code generation. >
Seems to be treated as passing a 1 byte quantity before the change. Note you need one more parameter on aarch64 to force struct B into the stack. IIRC the same problem should happen on AArch32 as well but I haven't tried that yet. regards Ramana