> Ideally we'd have a test that we could more deeply analyze for paths
> through the CFG that can't be executed.  Finding those paths usually
> both fixes the warning *and* results in better code.  Even if we
> can't fix it now, we can file it away for future work

It's multiple variables who are depending on each other, with complex
control flow inbetween. It's not surprising that it loses control
of all the combinations.

You can take a look yourself here:

/home/andi/gcc/git/gcc/gcc/tree-vrp.c: In function 'int 
compare_values_warnv(tree, tree, bool*)':
/home/andi/gcc/git/gcc/gcc/tree-vrp.c:1251:12: error: 'inv2' may be used 
uninitialized in this function [-Werror=maybe-uninitialized]
       tree inv = cst1 ? inv2 : inv1;
            ^~~
/home/andi/gcc/git/gcc/gcc/tree-vrp.c:1222:4: error: 'inv1' may be used 
uninitialized in this function [-Werror=maybe-uninitialized]
       if (strict_overflow_p != NULL
           ~~~~~~~~~~~~~~~~~~~~~~~~~
    && (!inv1 || !TREE_NO_WARNING (val1))
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-Andi

Reply via email to