/* PR c/66322 */ /* { dg-do compile } */ #ifndef __cplusplus # define bool _Bool # define true 1 # define false 0 #endif void nowarn (bool b) { switch (b) ; switch (b) { case true: case false: break; } switch (b) { case true: break; } switch (b) { case true: default: break; } switch (b) { case false: break; } switch (b) { case false: default: break; } switch (b) { default: break; } switch (b) { case false ... true: break; } switch (b) { case 1: switch (b) { case true: default: break; } default: break; } } void warn (bool b) { switch (b) /* { dg-warning "switch condition has" } */ { case true: case false: default: break; } switch (b) /* { dg-warning "switch condition has" } */ { case false ... true: default: break; } } void warn2 (int n) { switch (n == 2) /* { dg-warning "switch condition has" } */ { case 0 ... 2: /* { dg-warning "upper value" "" { target c++ } } */ default: break; } switch (n == 2) /* { dg-warning "switch condition has" } */ { case 1 ... 10: /* { dg-warning "upper value" "" { target c++ } } */ default: break; } switch (n == 2) /* { dg-warning "switch condition has" } */ { case 2: /* { dg-warning "case label" "" { target c++ } } */ break; } switch (n == 2) /* { dg-warning "switch condition has" } */ { case 0: case 1: case -1: /* { dg-warning "case label" "" { target c++ } } */ break; } switch (n == 2) /* { dg-warning "switch condition has" } */ { case -1 ... 1: /* { dg-warning "lower value" "" { target c++ } } */ break; } switch (n == 2) /* { dg-warning "switch condition has" } */ { case -1 ... 0: /* { dg-warning "lower value" "" { target c++ } } */ default: break; } switch (n == 2) /* { dg-warning "switch condition has" } */ { case -10 ... -1: /* { dg-warning "case label" "" { target c++ } } */ default: break; } }