------- Additional Comments From steven at gcc dot gnu dot org 2004-12-08 22:18 ------- extern int printf (__const char *__restrict __format, ...); void divisors_bug(long *t, long e, long P) { long j; long *d, *old_d, *act_d, *tmp; d = t; *++d = 5; old_d = t; for (j = e; j; j--) { act_d = d; tmp = old_d; while (tmp < act_d) *++d = *(++tmp); old_d=act_d; } } int main(void) { long t[4]; long i; divisors_bug(t,2,2); for(i=1;i<4;i++) printf("%ld ",t[i]); printf("\n"); return 0; } Expected output: 5 5 5 Output with -O1: 5 5 garbage
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18694