On 02/09/16 20:27, Segher Boessenkool wrote:
On Fri, Sep 02, 2016 at 02:21:07PM -0400, Eric Gallager wrote:
../../gcc/combine.c: In function ‘int combine_instructions(rtx_insn*,
unsigned int)’:
../../gcc/combine.c:1310:8: warning: ‘prev’ may be used uninitialized
in this function [-Wmaybe-uninitialized]
        if ((next = try_combine (insn, prev, NULL, NULL,
        ^~

That is:

          if (HAVE_cc0
              && JUMP_P (insn)
              && (prev = prev_nonnote_insn (insn)) != 0
              && NONJUMP_INSN_P (prev)
              && sets_cc0_p (PATTERN (prev)))
            {
              if ((next = try_combine (insn, prev, NULL, NULL,
                                       &new_direct_jump_p,
                                       last_combined_insn)) != 0)

so prev is always initialised here.  Could you try to find out why GCC
warns anyway?  Or open a PR?

HAVE_cc0 probably expands to 0 (I'm not sure what your target is), that
might have something to do with it.

Unfortunately, the location reported by GCC is sometimes wrong, because location tracking in the middle-end is far from perfect. https://gcc.gnu.org/PR40635 https://gcc.gnu.org/PR53917

The only way to know for sure what GCC is warning about is to look at the uninit dump.

Moreover, if the warning is bogus and not a regression, it is very likely that it is reported already here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639

The effort dedicated to report and analyze the report would be better spent fixing any of the issues already known.

Nevertheless, assignments within 'if' are one of the things that make reading GCC code harder than it needs to be (and combine.c is scary).

Cheers,

        Manuel.

Reply via email to