https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120616
Bug ID: 120616 Summary: Incorrect code with -O3 and compound literal Product: gcc Version: 16.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: fanghs666 at gmail dot com Target Milestone: --- int printf(const char *format, ...); struct S { int a; int b; int c; }; int func(struct S *s, long *g, long *o) { if (*o < 1) { switch (s->a) { case 1: { if (s->b < s->c) return 1; return 0; } case 2: { if (*g) break; } default: { return 0; break; } } } return 1; } static short g_arr[6] = {}; int main() { long long l_arr[5] = {1, 2}; long long k = l_arr[func((struct S[]){(struct S){}}, 0, (long *)(long long[]){0, 0})]; printf("=%lld\n", k); for (int i = 0; i < 6; i++) for (int j = 0; j < 10; j++) printf("", g_arr[i]); } The expected output is "=1". $ gcc-trunk -O3 a.c $ ./a.out =2