/* PR debug/51695 */ /* { dg-do compile { target { int32plus } } } */ /* { dg-options "-O2 -g" } */ typedef struct { struct { unsigned int t1, t2, t3, t4, t5, t6; } t; int p; struct { double X, Y, Z; } r; } T; typedef struct { T *h; } S; static unsigned int v = 0x12345678; int foo (void) { v = (v & 0x80000000) ? ((v << 1) ^ 0xa398655d) : (v << 1); return 0; } double bar (void) { unsigned int o; v = (v & 0x80000000) ? ((v << 1) ^ 0xa398655d) : (v << 1); o = v & 0xffff; return (double) o / 32768.0; } int baz (void) { foo (); return 0; } void test (S *x) { T *t = x->h; t->t.t1 = foo (); t->t.t2 = foo (); t->t.t3 = foo (); t->t.t4 = foo (); t->t.t5 = foo (); t->t.t6 = foo (); t->p = baz (); t->r.X = bar (); t->r.Y = bar (); t->r.Z = bar (); }