/* { dg-do run } */ /* { dg-options "-fschedule-insns" } */ /* { dg-require-effective-target scheduling } */ extern void abort (void) __attribute__((noreturn)); struct B { int a; int b;}; struct wrapper { union setconflict { struct S { char one1; struct B b1; } s; struct T { struct B b2; char two2; } t; } a; }; int main () { int sum = 0; int i; struct wrapper w; struct B *p; p = &w.a.s.b1; asm ("": "=r" (p):"0" (p)); p->a = 0; asm ("": "=r" (p):"0" (p)); sum += p->a; p = &w.a.t.b2; asm ("": "=r" (p):"0" (p)); p->b = 1; asm ("": "=r" (p):"0" (p)); sum += p->b; if (sum != 1) abort(); return 0; }