111
|
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
|
|
17 main ()
|
|
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 }
|