+++ /dev/null
-/* 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;
-}