1 /* PR debug/51695 */
2 /* { dg-do compile { target { int32plus } } } */
3 /* { dg-options "-O2 -g" } */
4 
5 typedef struct
6 {
7   struct { unsigned int t1, t2, t3, t4, t5, t6; } t;
8   int p;
9   struct { double X, Y, Z; } r;
10 } T;
11 typedef struct { T *h; } S;
12 
13 static unsigned int v = 0x12345678;
14 
15 int
foo(void)16 foo (void)
17 {
18   v = (v & 0x80000000) ? ((v << 1) ^ 0xa398655d) : (v << 1);
19   return 0;
20 }
21 
22 double
bar(void)23 bar (void)
24 {
25   unsigned int o;
26   v = (v & 0x80000000) ? ((v << 1) ^ 0xa398655d) : (v << 1);
27   o = v & 0xffff;
28   return (double) o / 32768.0;
29 }
30 
31 int
baz(void)32 baz (void)
33 {
34   foo ();
35   return 0;
36 }
37 
38 void
test(S * x)39 test (S *x)
40 {
41   T *t = x->h;
42   t->t.t1 = foo ();
43   t->t.t2 = foo ();
44   t->t.t3 = foo ();
45   t->t.t4 = foo ();
46   t->t.t5 = foo ();
47   t->t.t6 = foo ();
48   t->p = baz ();
49   t->r.X = bar ();
50   t->r.Y = bar ();
51   t->r.Z = bar ();
52 }
53