https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105539
--- Comment #9 from Qing Zhao <qing.zhao at oracle dot com> --- > It's a conditional uninit use which we do not warn on early by design > (for the fear of too many false positives, that is). Okay. > >> 2. the ccp optimization deletes the if (z) statement completely: >> >> [opc@qinzhao-aarch64-ol8 105539]$ cat t.c.034t.ccp1 >> >> ;; Function x (x, funcdef_no=0, decl_uid=3591, cgraph_uid=1, symbol_order=0) >> >> Removing basic block 3 >> Merging blocks 2 and 4 >> int x (int z) >> { >> int y; >> >> <bb 2> : >> return 10; >> >> } > > That's expected from optimistic lattice propagation which merges TOP with > the constant. If y is initialized to 0 at declaration site, the “if z” statement is NOT deleted by CCP. However, per design of -ftrivial-auto-var-init, we intent to not treat y = .DEFERRED_INIT (4, 2, &"y"[0]); Same as y= 0 In order to keep -Wuninitialized warning analysis working as expected. So, yes, I agree that this issue is unavoided based on the current design. > >> are the above two bugs? > > Well, it works as designed. But sure, that we fail to diagnose the uninit > use is unfortunate and there exist bugs for this specific issue already.