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; } }