------- 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