https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121894
--- Comment #7 from qinzhao at gcc dot gnu.org --- Or if we add an initialization in the source code as the following: struct S { int a, b, c, d; }; void bar (int, int, int, int); void foo () { S s = {}; s.a = 1; s.c = 2; s.d = 3; s.a++; s.c++; s.d++; bar (s.a, s.b, s.c, s.d); } with the exactly same options (-O2 -fno-tree-fre -fno-tree-pre -ftrivial-auto-var-init=pattern -Wuninitialized), the SRA scalarize s.b correctly as: s$a_22 = 0; s$b_23 = 0; s$c_24 = 0; s$d_25 = 0; and the final optimized tree code is good too: void foo () { <bb 2> [local count: 1073741824]: bar (2, 0, 3, 4); return; } So, I suspect that there is a bug in the routine "sra_modify_deferred_init". will study a little bit more here