| /* PR bootstrap/88714 */ |
| |
| struct S { int a, b, c; int *d; }; |
| struct T { int *e, *f, *g; } *t = 0; |
| int *o = 0; |
| |
| __attribute__((noipa)) |
| void bar (int *x, int y, int z, int w) |
| { |
| if (w == -1) |
| { |
| if (x != 0 || y != 0 || z != 0) |
| __builtin_abort (); |
| } |
| else if (w != 0 || x != t->g || y != 0 || z != 12) |
| __builtin_abort (); |
| } |
| |
| __attribute__((noipa)) void |
| foo (struct S *x, struct S *y, int *z, int w) |
| { |
| *o = w; |
| if (w) |
| bar (0, 0, 0, -1); |
| x->d = z; |
| if (y->d) |
| y->c = y->c + y->d[0]; |
| bar (t->g, 0, y->c, 0); |
| } |
| |
| int |
| main () |
| { |
| int a[4] = { 8, 9, 10, 11 }; |
| struct S s = { 1, 2, 3, &a[0] }; |
| struct T u = { 0, 0, &a[3] }; |
| o = &a[2]; |
| t = &u; |
| foo (&s, &s, &a[1], 5); |
| if (s.c != 12 || s.d != &a[1]) |
| __builtin_abort (); |
| return 0; |
| } |