URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [testsuite/] [gcc.c-torture/] [execute/] [20011126-2.c] - Rev 297
Compare with Previous | Blame | View Log
/* Problem originally visible on ia64. There is a partial redundancy of "in + 1" that makes GCSE want to transform the final while loop to p = in + 1; tmp = p; ... goto start; top: tmp = tmp + 1; start: in = tmp; if (in < p) goto top; We miscalculate the number of loop iterations as (p - tmp) = 0 instead of (p - in) = 1, which results in overflow in the doloop optimization. */ static const char * test (const char *in, char *out) { while (1) { if (*in == 'a') { const char *p = in + 1; while (*p == 'x') ++p; if (*p == 'b') return p; while (in < p) *out++ = *in++; } } } int main () { char out[4]; test ("aab", out); return 0; }