/* PR c/6223 This testcase ICEd in internal check because a constant was not truncated for its mode. */ /* { dg-do compile } */ /* { dg-options "-O2" } */ /* { dg-options "-O2 -march=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */ #if __INT_MAX__ > 32767 typedef struct { unsigned a : 16; unsigned b : 16; unsigned c : 5; unsigned d : 2; unsigned e : 1; unsigned f : 4; unsigned g : 1; unsigned h : 1; unsigned i : 1; unsigned j : 1; } T; inline void foo (T *x, unsigned int y) { if ((x->j = (y >= 0x100000))) y >>= 12; x->a = y; x->f = (y >> 16); } void __attribute__((noinline)) bar (T *x) { } void baz (unsigned int x, unsigned char y) { T t; foo (&t, x - 1); t.e = 1; t.c = y; t.g = 0; t.h = 0; t.i = (y & 0x40) != 0; if (x == 1) foo (&t, 1); bar (&t); } #endif /* __INT_MAX__ */