/* { dg-do run } */ /* { dg-options "-O0" } */ extern void abort (void); extern void exit (int); /* Check that out-of-bounds case warnings work in the case that the testing expression is promoted. */ int foo1 (unsigned char i) { switch (i) { case -1: /* { dg-warning "case label value is less than minimum value for type" } */ return 1; case 256: /* { dg-warning "case label value exceeds maximum value for type" } */ return 2; default: return 3; } } /* Like above, but for case ranges that need to be satured. */ int foo2 (unsigned char i) { switch (i) { case -1 ... 1: /* { dg-warning "lower value in case label range less than minimum value for type" } */ return 1; case 254 ... 256: /* { dg-warning "upper value in case label range exceeds maximum value for type" } */ return 2; default: return 3; } } int main (void) { if (foo1 (10) != 3) abort (); if (foo2 (10) != 3) abort (); exit (0); }