/* { dg-do run } */ /* { dg-options "-O" } */ /* Check that narrowing casts aren't ignored, and that same-field tests at different widths aren't misoptimized. */ struct s { short a; unsigned short b; int c; } __attribute__ ((aligned (4))); struct s p = { (short)(unsigned short)42, (short)(unsigned short)(0xef1 - 0x1000), (int)(unsigned int)0x12345678 }; void f (void) { if (0 || (p.a & 0xcc) != 8 || p.a != 42 || (int)(signed char)p.b != (int)(signed char)(0xef1 - 0x1000) || (unsigned)(unsigned char)p.b != (unsigned)(unsigned char)(0xef1 - 0x1000) || (unsigned)p.b != (unsigned short)(0xef1 - 0x1000) || (int)(short)p.b != (int)(short)(unsigned short)(0xef1 - 0x1000) || (long)(unsigned char)(p.c >> 8) != (long)(unsigned char)0x123456 || p.c != (int)(unsigned int)0x12345678 ) __builtin_abort (); } int main () { f (); return 0; }