/* PR c/60439 */ /* { dg-do compile } */ /* { dg-prune-output "case label value exceeds" } */ #ifndef __cplusplus # define bool _Bool #endif extern bool foo (void); void f1 (bool b) { switch (b) /* { dg-warning "switch condition has" } */ { case 3: break; } } void f2 (int a, int b) { switch (a && b) /* { dg-warning "switch condition has" } */ { case 3: break; } switch ((bool) (a && b)) /* { dg-warning "switch condition has" } */ { case 3: break; } switch ((a && b) || a) /* { dg-warning "switch condition has" } */ { case 3: break; } /* No warnings on following. */ switch ((int) (a && b)) break; switch ((unsigned int) (a && b)) break; switch ((unsigned short int) (a && b)) break; switch ((char) (a && b)) break; } void f3 (int a) { switch (!!a) /* { dg-warning "switch condition has" } */ { case 3: break; } switch (!a) /* { dg-warning "switch condition has" } */ { case 3: break; } } void f4 (void) { switch (foo ()) /* { dg-warning "switch condition has" } */ { case 3: break; } } void f5 (int a) { switch (a == 3) /* { dg-warning "switch condition has" } */ { case 3: break; } switch (a != 3) /* { dg-warning "switch condition has" } */ { case 3: break; } switch (a > 3) /* { dg-warning "switch condition has" } */ { case 3: break; } switch (a < 3) /* { dg-warning "switch condition has" } */ { case 3: break; } switch (a <= 3) /* { dg-warning "switch condition has" } */ { case 3: break; } switch (a >= 3) /* { dg-warning "switch condition has" } */ { case 3: break; } switch (foo (), foo (), a >= 42) /* { dg-warning "switch condition has" } */ { case 3: break; } switch (a == 3, a & 4, a ^ 5, a) break; switch ((int) (a == 3)) break; switch ((int) (a != 3)) break; } void f6 (bool b) { switch (b) /* { dg-warning "switch condition has" } */ { case 3: break; } switch (!b) /* { dg-warning "switch condition has" } */ { case 3: break; } } void f7 (void) { bool b; switch (b = 1) /* { dg-warning "switch condition has" } */ { case 3: break; } } void f8 (int i) { switch (i) break; switch ((int) i) break; switch ((unsigned int) i) break; switch ((bool) i) /* { dg-warning "switch condition has" } */ { case 11: break; } }