1 /* { dg-do run } */
2 /* { dg-options "-Os" } */
3
4 extern void abort (void);
5
foo(unsigned long x)6 void foo (unsigned long x)
7 {
8 }
9
10 typedef struct a {
11 volatile unsigned int a1, a2, a3, a4, a5;
12 } *A;
13 typedef struct {
14 volatile unsigned int b1, b2, b3, b4, b5;
15 } *B;
16 struct C {
17 void *c1, *c2;
18 A c3;
19 unsigned char c4;
20 };
21
22 void
bar(struct C * c,unsigned int * d)23 bar (struct C *c, unsigned int *d)
24 {
25 *d = *d | 1;
26 ((c->c4 >= 2)
27 ? (*(volatile unsigned int *) ((void *)(&((A)c->c3)->a5)) = *d)
28 : (*(volatile unsigned int *) ((void *)(&((B)c->c3)->b5)) = *d));
29
30 foo (50);
31 }
32
main(void)33 int main (void)
34 {
35 struct a a;
36 struct C c;
37 unsigned int d = 8;
38 c.c3 = &a;
39 c.c4 = 0;
40 bar (&c, &d);
41 if (a.a5 != 9)
42 abort ();
43 return 0;
44 }
45