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

Reply via email to