https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64614

            Bug ID: 64614
           Summary: bogus used initialized warning (in gcc 4.9.2 not in
                    4.8.3); switch statement versus &
           Product: gcc
           Version: 4.9.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dgilbert at redhat dot com

gcc t.c -O1 -Wall -Wextra

(Any -O value 1 or above)

t.c: In function ‘foo’:
t.c:15:15: warning: ‘tmp’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
       tmp[11] = 15;
               ^
(This code is similar to qemu's arch_init.c/ram_load loop where I hit this)

Gcc doesn't seem to be spotting that the tmp = baz initialiser will always
happen for the switch cases that use tmp.

this is using the Fedora 21 gcc: gcc version 4.9.2 20141101 (Red Hat 4.9.2-1)
(GCC) 
package: gcc-4.9.2-1.fc21.x86_64
It doesn't trigger for me on gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) 


char *foo(int bar, char *baz)
{
  char *tmp;

  if (bar & 3) {
      tmp = baz;
  }

  switch (bar) {
  case 1:
      tmp[5] = 7;
      break;

  case 2:
      tmp[11] = 15;
      break;

  default:
      tmp = 0;
      break;
  }

  return tmp;
}

Reply via email to