| /* { dg-do compile } */ |
| /* { dg-options "-O2 -g -funroll-loops -std=gnu99" } */ |
| |
| struct S |
| { |
| unsigned long s1; |
| int **s2; |
| }; |
| struct T |
| { |
| unsigned long t1, t2; |
| }; |
| struct U |
| { |
| int u1, u2; |
| unsigned long u3; |
| }; |
| struct V |
| { |
| int v1, v3; |
| struct T *v2; |
| struct U *v4; |
| }; |
| struct W |
| { |
| int w1; |
| struct V **w2; |
| }; |
| struct S *foo1 (void); |
| int *foo2 (void); |
| |
| void |
| test (struct W *w) |
| { |
| for (int i = 0; i < w->w1; i++) |
| { |
| struct V *v = w->w2[i]; |
| struct S *t = foo1 (); |
| if (!t) |
| for (int j; j < v->v1;) |
| { |
| struct T *q = &v->v2[j]; |
| t += (q->t2 - q->t1) * 45000L; |
| } |
| for (; v->v3;) |
| { |
| struct U *v4 = (struct U *) &v->v4; |
| if (v4->u1 && v4->u2 >= 0 && v4->u2) |
| { |
| int *s = foo2 (); |
| if (!s) |
| for (int k = 0; k <= v4->u2; k++) |
| { |
| struct T *q = &v->v2[k]; |
| if (k == v4->u2) |
| v4->u3 += (q->t1) * 1000000; |
| } |
| t->s2[t->s1] = s; |
| } |
| } |
| int *s = foo2 (); |
| if (!t) |
| t->s2[t->s1] = s; |
| } |
| } |