| /* PR rtl-optimization/93908 */ |
| |
| struct T |
| { |
| int b; |
| int c; |
| unsigned short d; |
| unsigned e:1, f:1, g:1, h:2, i:1, j:1; |
| signed int k:2; |
| }; |
| |
| struct S |
| { |
| struct T s; |
| char c[64]; |
| } buf[2]; |
| |
| __attribute__ ((noipa)) void * |
| baz (void) |
| { |
| static int cnt; |
| return (void *) &buf[cnt++]; |
| } |
| |
| static inline __attribute__ ((always_inline)) struct T * |
| bar (const char *a) |
| { |
| struct T *s; |
| s = baz (); |
| s->b = 1; |
| s->k = -1; |
| return s; |
| } |
| |
| __attribute__ ((noipa)) void |
| foo (const char *x, struct T **y) |
| { |
| struct T *l = bar (x); |
| struct T *m = bar (x); |
| y[0] = l; |
| y[1] = m; |
| } |
| |
| int |
| main () |
| { |
| struct T *r[2]; |
| foo ("foo", r); |
| if (r[0]->e || r[0]->f || r[0]->g || r[0]->h || r[0]->i || r[0]->j || r[0]->k != -1) |
| __builtin_abort (); |
| if (r[1]->e || r[1]->f || r[1]->g || r[1]->h || r[1]->i || r[1]->j || r[1]->k != -1) |
| __builtin_abort (); |
| return 0; |
| } |