Bug 52523

Summary: Missing "uninitialized" warning in simple code
Product: gcc Reporter: Andrea Corradi <andreac>
Component: tree-optimizationAssignee: Not yet assigned to anyone <unassigned>
Status: NEW ---    
Severity: normal CC: manu, pluto
Priority: P3    
Version: 4.7.0   
Target Milestone: ---   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2012-03-08 00:00:00
Bug Depends on:    
Bug Blocks: 24639    

Description Andrea Corradi 2012-03-07 20:21:12 UTC
Compiling this code:

#include <iostream>
int main()
{
  int x;
  std::cout << x;
  std::cin >> x;
}

with g++ -Wall uninitialized.cc
give no warning.

But compiling this code:

#include <iostream>
int main()
{
  int x;
  std::cout << x;
}

with g++ -Wall uninitialized.cc
gives:
uninitialized.cc: In function ‘int main()’:
uninitialized.cc:6:17: warning: ‘x’ is used uninitialized in this function [-Wuninitialized

Tested also on version 4.6.1 and 4.6.2
Comment 1 Manuel López-Ibáñez 2012-03-08 00:05:22 UTC
The SSA dump is a bit obscure to me:

int main() ()
{
  int x;
  int D.21721;
  int x.0;

<bb 2>:
  [pr52523.cc : 5:17] x.0_1 = x;
  [pr52523.cc : 5:17] std::basic_ostream<char>::operator<< ([pr52523.cc : 5] &cout, x.0_1);

<bb 3>:
  [pr52523.cc : 6:16] std::basic_istream<char>::operator>> ([pr52523.cc : 6] &cin, &x);

<bb 4>:
  x ={v} {CLOBBER};
  [pr52523.cc : 7:1] D.21721_2 = 0;

<L0>:
  [pr52523.cc : 7:1] return D.21721_2;

<L1>:
  x ={v} {CLOBBER};
  resx 1

}

but I guess that 'std::cin >> x' creates a VOP, and the warning machinery does not work well with VOPs. See PR19430.