------- Comment #5 from falk at debian dot org 2006-02-19 18:19 -------
The problem apparently comes from using negation on an induction variable,
in a context where widening is needed:
[EMAIL PROTECTED]:/tmp% cat alpha.c
void abort(void);
int printf(const char *format, ...);
__attribute__((noinline))
void gen_rtx_CONST_INT(long x) {
if (-x > 10)
abort();
}
__attribute__((noinline))
int alpha_expand_prologue(long frame_size)
{
int probed;
for (probed = 1; probed < frame_size; probed += 2) {
printf("probed = %d, frame_size = %ld\n",
probed, frame_size);
gen_rtx_CONST_INT (-probed);
}
}
int main(void) {
alpha_expand_prologue(10);
return 0;
}
[EMAIL PROTECTED]:/tmp% /src/gcc-2006.02.19/build/prev-gcc/xgcc
-B/src/gcc-2006.02.19/build/prev-gcc/ -g -O2 alpha.c && ./a.out
probed = 1, frame_size = 10
probed = 3, frame_size = 10
probed = 5, frame_size = 10
probed = 7, frame_size = 10
probed = 9, frame_size = 10
probed = 11, frame_size = 10
zsh: abort (core dumped) ./a.out
[EMAIL PROTECTED]:/tmp% /src/gcc-2006.02.19/build/prev-gcc/xgcc
-B/src/gcc-2006.02.19/build/prev-gcc/ -g -O2 -fno-ivopts alpha.c && ./a.out
probed = 1, frame_size = 10
probed = 3, frame_size = 10
probed = 5, frame_size = 10
probed = 7, frame_size = 10
probed = 9, frame_size = 10
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26361