1/* { dg-do run } */ 2/* { dg-require-effective-target ilp32 } */ 3/* { dg-options "-O2 -mpreferred-stack-boundary=2 -march=i686 -frename-registers" } */ 4 5extern void abort (void) __attribute__((noreturn)); 6 7struct wrapper { 8union setconflict 9{ 10 short a[20]; 11 int b[10]; 12} a; 13}; 14 15int 16main () 17{ 18 int sum = 0; 19 { 20 struct wrapper a; 21 short *c; 22 c = a.a.a; 23 asm ("": "=r" (c):"0" (c)); 24 *c = 0; 25 asm ("": "=r" (c):"0" (c)); 26 sum += *c; 27 } 28 { 29 struct wrapper a; 30 int *c; 31 c = a.a.b; 32 asm ("": "=r" (c):"0" (c)); 33 *c = 1; 34 asm ("": "=r" (c):"0" (c)); 35 sum += *c; 36 } 37 38 if (sum != 1) 39 abort(); 40 return 0; 41} 42 43