https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89976
--- Comment #6 from Eric Gallager <egallager at gcc dot gnu.org> --- (In reply to Martin Sebor from comment #4) > In all cases and with -O1 and above, the uninitialized read is clearly > visible in the IL but it's suppressed because the variable (such as x$x in > case 1) has the TREE_NO_WARNING bit set. This appears to be regression > introduced in GCC 4.5 in r147980. > > gcc -O1 -S -Wall -std=c++14 -fdump-tree-uninit=/dev/stdout pr89976.C > > ;; Function foo (_Z3foov, funcdef_no=3, decl_uid=2098, cgraph_uid=4, > symbol_order=3) > > struct X foo () > { > int x$x; <<< TREE_NO_WARNING == 1 > struct X D.2133; > > <bb 2> [local count: 1073741824]: > D.2133.x = x$x_2(D); <<< uninitialized read > D.2133.y = 0; > return D.2133; > > } > > > > ;; Function main (main, funcdef_no=4, decl_uid=2129, cgraph_uid=5, > symbol_order=4) (executed once) > > int main () > { > int x$x; <<< TREE_NO_WARNING == 1 > struct X D.2156; > struct X x; > > <bb 2> [local count: 1073741824]: > x ={v} {CLOBBER}; > return x$x_5(D); <<< uninitialized read > > } did your TREE_NO_WARNING overhaul affect this at all?