Bug 52523 - Missing "uninitialized" warning (VOP, taking address of var)
Summary: Missing "uninitialized" warning (VOP, taking address of var)
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 4.7.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
Depends on:
Blocks: Wuninitialized
  Show dependency treegraph
Reported: 2012-03-07 20:21 UTC by Andrea Corradi
Modified: 2017-09-17 18:07 UTC (History)
3 users (show)

See Also:
Known to work:
Known to fail:
Last reconfirmed: 2012-03-08 00:00:00


Note You need to log in before you can comment on or make changes to this bug.
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
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;

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

  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.