131
|
1 /* PR tree-optimization/84503 */
|
|
2 /* { dg-do run } */
|
|
3 /* { dg-options "-O3" } */
|
|
4
|
|
5 typedef __SIZE_TYPE__ size_t;
|
|
6 typedef __UINTPTR_TYPE__ uintptr_t;
|
|
7
|
|
8 struct S { int a; unsigned short b; int c, d, e; long f, g, h; int i, j; };
|
|
9 static struct S *k;
|
|
10 static size_t l = 0;
|
|
11 int m;
|
|
12
|
|
13 static int
|
|
14 bar (void)
|
|
15 {
|
|
16 unsigned i;
|
|
17 int j;
|
|
18 if (k[0].c == 0)
|
|
19 {
|
|
20 ++m;
|
|
21 size_t n = l * 2;
|
|
22 struct S *o;
|
|
23 o = (struct S *) __builtin_realloc (k, sizeof (struct S) * n);
|
|
24 if (!o)
|
|
25 __builtin_exit (0);
|
|
26 k = o;
|
|
27 for (i = l; i < n; i++)
|
|
28 {
|
|
29 void *p = (void *) &k[i];
|
|
30 int q = 0;
|
|
31 size_t r = sizeof (struct S);
|
|
32 if ((((uintptr_t) p) % __alignof__ (long)) == 0
|
|
33 && r % sizeof (long) == 0)
|
|
34 {
|
|
35 long __attribute__ ((may_alias)) *s = (long *) p;
|
|
36 long *t = (long *) ((char *) s + r);
|
|
37 while (s < t)
|
|
38 *s++ = 0;
|
|
39 }
|
|
40 else
|
|
41 __builtin_memset (p, q, r);
|
|
42 k[i].c = i + 1;
|
|
43 k[i].a = -1;
|
|
44 }
|
|
45 k[n - 1].c = 0;
|
|
46 k[0].c = l;
|
|
47 l = n;
|
|
48 }
|
|
49 j = k[0].c;
|
|
50 k[0].c = k[j].c;
|
|
51 return j;
|
|
52 }
|
|
53
|
|
54 int
|
|
55 main ()
|
|
56 {
|
|
57 k = (struct S *) __builtin_malloc (sizeof (struct S));
|
|
58 if (!k)
|
|
59 __builtin_exit (0);
|
|
60 __builtin_memset (k, '\0', sizeof (struct S));
|
|
61 k->a = -1;
|
|
62 l = 1;
|
|
63 for (int i = 0; i < 15; ++i)
|
|
64 bar ();
|
|
65 if (m != 4)
|
|
66 __builtin_abort ();
|
|
67 return 0;
|
|
68 }
|