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

            Bug ID: 65182
           Summary: -Wuninitialized fails when pointer to variable later
                    passed to function
           Product: gcc
           Version: 4.9.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tisaac at ices dot utexas.edu

Created attachment 34848
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34848&action=edit
Test program that demonstrates -Wuninitialized failure

If a pointer to a variable is passed *after* it is used uninitialized, then
-Wuninitialized fails to report.

Test code:

>cat test.c

#include <stdio.h>
#include <stdlib.h>

void
bar(int *a)
{
  *a = 2;
}

int
baz (void)
{
  return 3;
}

void
foo(int *b)
{
  int a;

  if (a) {
    *b = 0;
    return;
  }

#if defined(USE_AS_POINTER)
  bar(&a);
#endif

  a = baz();

  *b = a + 2;
}

int
main (int argc, char **argv)
{
  int c;

  c = atoi(argv[1]);

  foo(&c);

  return c;
}

>gcc-4.9 -O0 -Wuninitialized -c -o test.o test.c

test.c: In function ‘foo’:
test.c:21:6: warning: ‘a’ is used uninitialized in this function
[-Wuninitialized]
   if (a) {
      ^
>gcc-4.9 -DUSE_AS_POINTER -O0 -Wuninitialized -c -o test.o test.c

[no output]

>uname --all

Linux alembic 3.2.0-76-generic #111-Ubuntu SMP Tue Jan 13 22:16:09 UTC 2015
x86_64 x86_64 x86_64 GNU/Linux

>gcc-4.9 --version

gcc-4.9 (Ubuntu 4.9.2-0ubuntu1~12.04) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Reply via email to