https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91195
Bug ID: 91195
Summary: [10 regression] incorrect may be used uninitialized
smw (272711, 273474]
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: dimhen at gmail dot com
Target Milestone: ---
r272711 PASS
r273474 FAIL
r273563 FAIL
$ ~/arch-gcc/gcc_272711/bin/gcc -Werror=maybe-uninitialized -O2 -c x.c -DFOUR
$ ~/arch-gcc/gcc_273474/bin/gcc -Werror=maybe-uninitialized -O2 -c x.c
$ ~/arch-gcc/gcc_273474/bin/gcc -Werror=maybe-uninitialized -O2 -c x.c -DFOUR
x.c: In function ‘foo’:
x.c:15:13: error: ‘Msg[0]’ may be used uninitialized in this function
[-Werror=maybe-uninitialized]
15 | Msg[num++] = m1;
| ~~~~~~~~~~~^~~~
cc1: some warnings being treated as errors
$ cat x.c
int f(char*);
#if defined FOUR
#define FOR_UP_LIMIT 4 // FAIL
#else
#define FOR_UP_LIMIT 3 // PASS
#endif
void foo(char *m1, char* m2)
{
char* Msg[2];
int num = 0;
if(m1)
Msg[num++] = m1;
if(m2)
Msg[num++] = m2;
for (int j = 0; j < FOR_UP_LIMIT; j++)
switch (j) {
case 0:
if(num == 0 || f(Msg[0]) )
break;
}
}