Jiong Wang wrote: test.c === struct K { int a; int b; int c; int d; char e; short f; long g; float h; double i; };
void foo (int, struct K *); void test (int i) { struct K k = { .a = 5, .b = 0, .c = i, }; foo (5, &k); } There are 2 separate latent bugs here, both unrelated to this patch. If I build with -fomit-frame pointer I get: str x30, [sp, -64]! mov w2, 5 mov x1, sp str w2, [sp, 16] add x1, x1, 20 stp xzr, xzr, [x1] add x1, sp, 16 str w0, [sp, 24] mov x0, sp add x0, x0, 36 stp xzr, xzr, [x0] mov w0, w2 str xzr, [sp, 52] str wzr, [sp, 60] bl foo ldr x30, [sp], 64 ret If I use a compiler from early January (which also includes my patch) I get: str x30, [sp, -64]! mov w2, 5 stp xzr, xzr, [sp, 16] add x1, sp, 16 str w0, [sp, 24] mov w0, w2 stp xzr, xzr, [sp, 32] stp xzr, xzr, [sp, 48] str w2, [sp, 16] bl foo ldr x30, [sp], 64 ret Clearly a nasty regression was introduced in the structure initialization code... Wilco