On Sat, 20 Aug 2022, Andrew Pinski wrote: > On Sat, Aug 20, 2022 at 3:34 PM Andreas Schwab <sch...@linux-m68k.org> wrote: > > > > This breaks bootstrap: > > > > ../../gcc/tree-vect-loop-manip.cc: In function 'void > > vect_gen_vector_loop_niters(loop_vec_info, tree, tree_node**, tree_node**, > > bool)': > > ../../gcc/tree-vect-loop-manip.cc:1981:26: error: 'const_vf' may be used > > uninitialized [-Werror=maybe-uninitialized] > > 1981 | unsigned HOST_WIDE_INT const_vf; > > | ^~~~~~~~ > > cc1plus: all warnings being treated as errors > > make[3]: *** [Makefile:1146: tree-vect-loop-manip.o] Error 1 > > make[2]: *** [Makefile:4977: all-stage2-gcc] Error 2 > > make[1]: *** [Makefile:30363: stage2-bubble] Error 2 > > make: *** [Makefile:1065: all] Error 2 > > > This looks like a real uninitialized variable issue. > I even can't tell if the paths that lead to using const_vf will be > always set so how we expect GCC to do the same. > The code that uses const_vf was added with r11-5820-cdcbef3c3310, > CCing the author there.
The key is tree log_vf = NULL_TREE; ... unsigned HOST_WIDE_INT const_vf; if (vf.is_constant (&const_vf) && !LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo)) { ... log_vf = build_int_cst (type, exact_log2 (const_vf)); ... } ... if (stmts != NULL && log_vf) { ... use const_vf ... so it's uninit analysis little mind that is confused. There is code that's supposed to handle the situation (setting flag under condition, testing that flag instead of condition) but maybe it's too twisted here. One could refector this as bool const_vf_p = vf.is_constant (&const_vf); if (const_vf_p && ...) ... if (stmts != NULL && const_vf_p) ... and hope uninits mind is good enough to see log_vf is not used uninitialized. I can also look into why uninit doesn't get it, but preprocessed source would be handy then. Richard.