This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/20644] bogus uninitialized warning on unused variable
- From: "manu at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 20 Aug 2007 14:18:26 -0000
- Subject: [Bug middle-end/20644] bogus uninitialized warning on unused variable
- References: <bug-20644-1186@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #7 from manu at gcc dot gnu dot org 2007-08-20 14:18 -------
Even simpler testcase:
int foo ()
{
int i = 0;
int j;
if (1 == i)
return j;
return 0;
}
This will only be reliably fixed by building a better SSA representation.
Moving the passes around will just solve it by chance (because CCP will assume
that j undefined value is actually 0, and thus remove j). Also, it will silence
many warnings (for the same reason, CCP happily initializing uninitialized
variables)
So instead of:
foo ()
{
int j;
int i;
int D.1280;
<bb 0>:
[pr20644.c : 3] i_2 = 0;
[pr20644.c : 6] if ([pr20644.c : 6] i_2 == 1) goto <L0>; else goto <L1>;
<L0>:;
[pr20644.c : 7] D.1280_6 = j_5;
[pr20644.c : 7] goto <bb 3> (<L2>);
<L1>:;
[pr20644.c : 9] D.1280_4 = 0;
# D.1280_1 = PHI <D.1280_6(1), D.1280_4(2)>;
<L2>:;
return D.1280_1;
}
We could generate:
foo ()
{
int j;
int i;
<bb 0>:
[pr20644.c : 3] i_2 = 0;
[pr20644.c : 6] if ([pr20644.c : 6] i_2 == 1) goto <L0>; else goto <L1>;
<L0>:;
[pr20644.c : 7] goto <bb 3> (<L2>);
<L1>:;
[pr20644.c : 9] j_6 = 0;
# j_7 = PHI <j_5(D), j_6(2)>;
<L2>:;
return j_7;
}
--
manu at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |manu at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20644