| /* This testcase failed at -O2 on IA-64, because scheduling did not take |
| into account conditional execution when using cselib for alias |
| analysis. */ |
| |
| struct D { int d1; struct D *d2; }; |
| struct C { struct D c1; long c2, c3, c4, c5, c6; }; |
| struct A { struct A *a1; struct C *a2; }; |
| struct B { struct C b1; struct A *b2; }; |
| |
| extern void abort (void); |
| extern void exit (int); |
| |
| void |
| foo (struct B *x, struct B *y) |
| { |
| if (x->b2 == 0) |
| { |
| struct A *a; |
| |
| x->b2 = a = y->b2; |
| y->b2 = 0; |
| for (; a; a = a->a1) |
| a->a2 = &x->b1; |
| } |
| |
| if (y->b2 != 0) |
| abort (); |
| |
| if (x->b1.c3 == -1) |
| { |
| x->b1.c3 = y->b1.c3; |
| x->b1.c4 = y->b1.c4; |
| y->b1.c3 = -1; |
| y->b1.c4 = 0; |
| } |
| |
| if (y->b1.c3 != -1) |
| abort (); |
| } |
| |
| struct B x, y; |
| |
| int main () |
| { |
| y.b1.c1.d1 = 6; |
| y.b1.c3 = 145; |
| y.b1.c4 = 2448; |
| x.b1.c3 = -1; |
| foo (&x, &y); |
| exit (0); |
| } |