------- Additional Comments From steven at gcc dot gnu dot org 2005-01-23
22:06 -------
The tree dump already looks wrong to me on mainline:
g (k, l)
{
int j.0;
int j;
_Bool D.1460;
int D.1459;
int D.1458;
int D.1457;
<bb 0>:
D.1457 = f ();
if (D.1457 != 0) goto <L0>; else goto <L1>;
<L0>:;
j = k + l;
goto <bb 6> (<L5>);
<L1>:;
j = k + l;
j.0 = j + 1;
if (j.0 > 0) goto <L2>; else goto <L3>;
<L2>:;
j = j + 2;
goto <bb 6> (<L5>);
<L3>:;
if (j.0 < 0) goto <L5>; else goto <L10>;
<L10>:;
j = j.0;
<L5>:;
if ((j & 1) != 0) goto <L8>; else goto <L9>;
<L8>:;
abort ();
<L9>:;
return;
}
Note how "j0 = j + 1" is assigned to j, which is "k + l" at that point,
but the predecrement does not happen.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19579