1 /* { dg-do run } */ 2 /* { dg-options "-fschedule-insns" } */ 3 /* { dg-require-effective-target scheduling } */ 4 5 extern void abort (void) __attribute__((noreturn)); 6 7 struct B { int a; int b;}; 8 struct wrapper { 9 union setconflict 10 { 11 struct S { char one1; struct B b1; } s; 12 struct T { struct B b2; char two2; } t; 13 } a; 14 }; 15 16 int main()17main () 18 { 19 int sum = 0; 20 int i; 21 struct wrapper w; 22 struct B *p; 23 24 p = &w.a.s.b1; 25 asm ("": "=r" (p):"0" (p)); 26 p->a = 0; 27 asm ("": "=r" (p):"0" (p)); 28 sum += p->a; 29 30 p = &w.a.t.b2; 31 asm ("": "=r" (p):"0" (p)); 32 p->b = 1; 33 asm ("": "=r" (p):"0" (p)); 34 sum += p->b; 35 36 if (sum != 1) 37 abort(); 38 return 0; 39 } 40