https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91470
Martin Sebor changed:
What|Removed |Added
Known to fail||10.2.0, 11.0
Last reconfirmed|2019-08-27 00:00:00 |2021-4-15
CC||msebor at gcc dot gnu.org
--- Comment #5 from Martin Sebor ---
Reconfirmed with GCC 11 and a reduced/corrected test case and slightly enhanced
output:
$ cat pr91470.c && gcc -O2 -S -Wall pr91470.c
int i1;
int* f1 (int);
void f2 (int, int);
void g2 (int, void *);
void f0 (void)
{
int *p;
for (int i = 0; i < 2; i++)
{
f2 (0, 0);
f2 (0, 0);
f2 (0, 0);
f2 (0, 0);
g2 (i1, 0);
if (i == 0)
p = f1 (0);
}
g2 (i1, p);
}
void f0 ()
{
int i;
int * p;
int i1.0_1;
int i1.1_2;
int _6;
[local count: 357878152]:
[local count: 715863673]:
# p_26 = PHI
# i_27 = PHI <_6(6), 0(2)>
# .MEM_28 = PHI <.MEM_25(6), .MEM_10(D)(2)>
# .MEM_12 = VDEF <.MEM_28>
f2 (0, 0);
# .MEM_13 = VDEF <.MEM_12>
f2 (0, 0);
# .MEM_14 = VDEF <.MEM_13>
f2 (0, 0);
# .MEM_15 = VDEF <.MEM_14>
f2 (0, 0);
# VUSE <.MEM_15>
i1.0_1 = i1;
# .MEM_16 = VDEF <.MEM_15>
g2 (i1.0_1, 0B);
_6 = i_27 + 1;
if (_6 == 1)
goto ; [21.69%]
else
goto ; [78.31%]
[local count: 155270830]:
# .MEM_17 = VDEF <.MEM_16>
p_18 = f1 (0);
goto ; [100.00%]
[local count: 560592843]:
if (_6 != 2)
goto ; [36.16%]
else
goto ; [63.84%]
[local count: 202714689]:
[local count: 357985519]:
# p_4 = PHI
# .MEM_25 = PHI <.MEM_16(8), .MEM_17(4)>
goto ; [100.00%]
[local count: 357878152]:
# VUSE <.MEM_16>
i1.1_2 = i1;
# .MEM_11 = VDEF <.MEM_16>
g2 (i1.1_2, p_26); [tail call]
# VUSE <.MEM_11>
return;
}
pr91470.c: In function ‘f0’:
pr91470.c:23:3: warning: ‘p’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
23 | g2 (i1, p);
| ^~
pr91470.c:9:8: note: used when ‘i + 1 != 1 && i + 1 != 2 || i + 1 != 1 && i + 1
== 2’
9 | int *p;
|^
pr91470.c:9:8: note: ‘p’ was declared here