1/* PR middle-end/29272 */ 2 3extern void abort (void); 4 5struct S { struct S *s; } s; 6struct T { struct T *t; } t; 7 8static inline void 9foo (void *s) 10{ 11 struct T *p = s; 12 __builtin_memcpy (&p->t, &t.t, sizeof (t.t)); 13} 14 15void * 16__attribute__((noinline)) 17bar (void *p, struct S *q) 18{ 19 q->s = &s; 20 foo (p); 21 return q->s; 22} 23 24int 25main (void) 26{ 27 t.t = &t; 28 if (bar (&s, &s) != (void *) &t) 29 abort (); 30 return 0; 31} 32