On 02/05/16 16:15, Jeff Law wrote:
On 05/02/2016 03:47 AM, Richard Sandiford wrote:
Kyrill Tkachov <kyrylo.tkac...@foss.arm.com> writes:
Hi all,

I'm getting a warning when building genrecog that 'label' may be used
uninitialised in:

       uint64_t label = 0;

       if (d->test.kind == rtx_test::CODE
       && d->if_statement_p (&label)
       && label == CONST_INT)

This is because if_statement_p looks like this:
  inline bool
  decision::if_statement_p (uint64_t *label) const
  {
    if (singleton () && first->labels.length () == 1)
      {
        if (label)
          *label = first->labels[0];
        return true;
      }
    return false;
  }

It's not guaranteed to write label.

It is guaranteed to write to label on a true return though, so it looks
like a false positive.  Is current GCC warning for this or are you using
an older host compiler?

This was after I upgraded my host compiler to GCC 6.1.
I saw it with GCC 5.3 as well.

And if it's warning with the current trunk, we should open a BZ with a suitable 
testcase.  DOM/VRP should have detected this and removed the path with the 
uninitialized use from the CFG, if it didn't then it's a bug worth filing.


After experimenting a bit, I note that the warning goes away when I compile 
with -O2.
In the cross compiler build I'm doing genrecog.c is compiler with -O1, which 
exhibits the warning.
So I suppose DOM/VRP does catch, but only at the appropriate optimisation level.

Kyrill

jeff

Reply via email to