1 /* PR rtl-optimization/69691 */
2
3 char u[] = { 46, 97, 99, 104, 52, 0 };
4 char *v[] = { u, 0 };
5 struct S { char a[10]; struct S *b[31]; };
6 struct S r[7], *r2 = r;
7 static struct S *w = 0;
8
9 __attribute__((noinline, noclone)) int
fn(int x)10 fn (int x)
11 {
12 if (__builtin_strchr (u, x) || x == 96)
13 return x;
14 __builtin_abort ();
15 }
16
17 __attribute__((noinline, noclone)) int
foo(char x)18 foo (char x)
19 {
20 if (x == 0)
21 __builtin_abort ();
22 if (fn (x) >= 96 && fn (x) <= 122)
23 return (fn (x) - 96);
24 else if (x == 46)
25 return 0;
26 else
27 {
28 __builtin_printf ("foo %d\n", x);
29 return -1;
30 }
31 }
32
33 __attribute__((noinline, noclone)) void
bar(char ** x)34 bar (char **x)
35 {
36 char **b, c, *d, e[500], *f, g[10];
37 int z, l, h, i;
38 struct S *s;
39
40 w = r2++;
41 for (b = x; *b; b++)
42 {
43 __builtin_strcpy (e, *b);
44 f = e;
45 do
46 {
47 d = __builtin_strchr (f, 32);
48 if (d)
49 *d = 0;
50 l = __builtin_strlen (f);
51 h = 0;
52 s = w;
53 __builtin_memset (g, 0, sizeof (g));
54 for (z = 0; z < l; z++)
55 {
56 c = f[z];
57 if (c >= 48 && c <= 57)
58 g[h] = c - 48;
59 else
60 {
61 i = foo (c);
62 if (!s->b[i])
63 {
64 s->b[i] = r2++;
65 if (r2 == &r[7])
66 __builtin_abort ();
67 }
68 s = s->b[i];
69 h++;
70 }
71 }
72 __builtin_memcpy (s->a, g, 10);
73 if (d)
74 f = d + 1;
75 }
76 while (d);
77 }
78 }
79
80 __attribute__((noinline, noclone)) void
baz(char * x)81 baz (char *x)
82 {
83 char a[300], b[300];
84 int z, y, t, l;
85 struct S *s;
86
87 l = __builtin_strlen (x);
88 *a = 96;
89 for (z = 0; z < l; z++)
90 {
91 a[z + 1] = fn ((unsigned int) x[z]);
92 if (foo (a[z + 1]) <= 0)
93 return;
94 }
95 a[l + 1] = 96;
96 l += 2;
97 __builtin_memset (b, 0, l + 2);
98
99 if (!w)
100 return;
101
102 for (z = 0; z < l; z++)
103 {
104 s = w;
105 for (y = z; y < l; y++)
106 {
107 s = s->b[foo (a[y])];
108 if (!s)
109 break;
110 for (t = 0; t <= y - z + 2; t++)
111 if (s->a[t] > b[z + t])
112 b[z + t] = s->a[t];
113 }
114 }
115 for (z = 3; z < l - 2; z++)
116 if ((b[z] & 1) == 1)
117 asm ("");
118 }
119
120 int
main()121 main ()
122 {
123 bar (v);
124 char c[] = { 97, 97, 97, 97, 97, 0 };
125 baz (c);
126 return 0;
127 }
128