/* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-optimized" } */ typedef struct { unsigned short a; } A; extern void abort (void); extern void exit (int); void foo (unsigned int x) { if (x != 0x800 && x != 0x810) abort (); } int main (int argc, char **argv) { int i; for (i = 0; i < 2; ++i) foo (((A) { ((!(i >> 4) ? 8 : 64 + (i >> 4)) << 8) + (i << 4) } ).a); exit (0); } /* { dg-final { scan-tree-dump-times "Invalid sum" 0 "optimized" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */