My builds for the last couple of days have all been failing in stage 2
like so:
/home/arth/src/gcc/gcc/config/i386/i386.c: In function ‘rtx_def* ix86_expand_bui
ltin(tree, rtx, rtx, machine_mode, int)’:
/home/arth/src/gcc/gcc/config/i386/i386.c:38407:18: error: ‘fcn’ may be used uni
nitialized in this function [-Werror=maybe-uninitialized]
emit_insn (fcn (target, accum, wide_reg, mem));
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Anyone else seeing this?
I'm seeing it too. The code is new, but the 'may be used unitialized'
warning itself is, probably, an instance of the old PR36550.
I have reduced this testcase to:
//------------------------------------------------------------------------
/* { dg-do compile } */
/* { dg-options "-O2 -Wuninitialized" } */
int force_reg (int, int);
int expand_expr_real (int, int);
void f (int);
void ix86_expand_builtin (int fcode, int pmode)
{
int fcn;
int i, addr, masked = 1;
switch (fcode)
{
case 1:
fcn = 1;
masked = 0;
goto s4fma_expand;
case 2:
fcn = 2;
masked = 0;
goto s4fma_expand;
case 4:
{
s4fma_expand:
for (i = 0; i < 4; i++)
expand_expr_real (0, 0);
addr = expand_expr_real (0, 0);
force_reg ((pmode ? 0 : 2), addr);
if (! masked)
f (fcn);
}
}
}
//------------------------------------------------------------------------
It fails with every gcc version down to 3.2 (the oldest one I could
compile on my amd64 box). Note that this testcase is particularly
flaky: recent gccs will not issue a warning if one, for example, changes
the '2' to '1' in the force_reg() call.