55 lines
861 B
C
55 lines
861 B
C
/* 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-*-* } && ilp32 } } } */
|
|
|
|
#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__ */
|