I think I have observed a bug in the reporting of uninitialized
variables using -Wall .

As an example, this small program does not report any warnings:

#include <stdio.h>
int main(int argc, char *argv[])
{
  int v1[1];
  int *v2 = new int;
  printf("%d\n", v1[0]);
  *v2 = 1;
}
Why not?


An almost identical program does report the uninitialized variable:
#include <stdio.h>
int main(int argc, char *argv[])
{
  int v1[1];
  printf("%d\n", v1[0]);
}

~/gcc-6.2.0/bin/g++ -Wall -o foo foo.cpp
foo.cpp: In function ‘int main(int, char**)’:
foo.cpp:5:9: warning: ‘v1[0]’ is used uninitialized in this function
[-Wuninitialized]
   printf("%d\n", v1[0]);

Why does removing the unrelated v2 variable cause g++ to correctly
warn of the uninitialized variable?

It is uninitialized in both cases and prints memory garbage:

./foo
1337669504
./foo
1830092400

Reply via email to