| /* PR rtl-optimization/69691 */ |
| |
| char u[] = { 46, 97, 99, 104, 52, 0 }; |
| char *v[] = { u, 0 }; |
| struct S { char a[10]; struct S *b[31]; }; |
| struct S r[7], *r2 = r; |
| static struct S *w = 0; |
| |
| __attribute__((noinline, noclone)) int |
| fn (int x) |
| { |
| if (__builtin_strchr (u, x) || x == 96) |
| return x; |
| __builtin_abort (); |
| } |
| |
| __attribute__((noinline, noclone)) int |
| foo (char x) |
| { |
| if (x == 0) |
| __builtin_abort (); |
| if (fn (x) >= 96 && fn (x) <= 122) |
| return (fn (x) - 96); |
| else if (x == 46) |
| return 0; |
| else |
| { |
| __builtin_printf ("foo %d\n", x); |
| return -1; |
| } |
| } |
| |
| __attribute__((noinline, noclone)) void |
| bar (char **x) |
| { |
| char **b, c, *d, e[500], *f, g[10]; |
| int z, l, h, i; |
| struct S *s; |
| |
| w = r2++; |
| for (b = x; *b; b++) |
| { |
| __builtin_strcpy (e, *b); |
| f = e; |
| do |
| { |
| d = __builtin_strchr (f, 32); |
| if (d) |
| *d = 0; |
| l = __builtin_strlen (f); |
| h = 0; |
| s = w; |
| __builtin_memset (g, 0, sizeof (g)); |
| for (z = 0; z < l; z++) |
| { |
| c = f[z]; |
| if (c >= 48 && c <= 57) |
| g[h] = c - 48; |
| else |
| { |
| i = foo (c); |
| if (!s->b[i]) |
| { |
| s->b[i] = r2++; |
| if (r2 == &r[7]) |
| __builtin_abort (); |
| } |
| s = s->b[i]; |
| h++; |
| } |
| } |
| __builtin_memcpy (s->a, g, 10); |
| if (d) |
| f = d + 1; |
| } |
| while (d); |
| } |
| } |
| |
| __attribute__((noinline, noclone)) void |
| baz (char *x) |
| { |
| char a[300], b[300]; |
| int z, y, t, l; |
| struct S *s; |
| |
| l = __builtin_strlen (x); |
| *a = 96; |
| for (z = 0; z < l; z++) |
| { |
| a[z + 1] = fn ((unsigned int) x[z]); |
| if (foo (a[z + 1]) <= 0) |
| return; |
| } |
| a[l + 1] = 96; |
| l += 2; |
| __builtin_memset (b, 0, l + 2); |
| |
| if (!w) |
| return; |
| |
| for (z = 0; z < l; z++) |
| { |
| s = w; |
| for (y = z; y < l; y++) |
| { |
| s = s->b[foo (a[y])]; |
| if (!s) |
| break; |
| for (t = 0; t <= y - z + 2; t++) |
| if (s->a[t] > b[z + t]) |
| b[z + t] = s->a[t]; |
| } |
| } |
| for (z = 3; z < l - 2; z++) |
| if ((b[z] & 1) == 1) |
| asm (""); |
| } |
| |
| int |
| main () |
| { |
| bar (v); |
| char c[] = { 97, 97, 97, 97, 97, 0 }; |
| baz (c); |
| return 0; |
| } |