/* { dg-additional-options -Wswitch } */ enum E0 { a0 = 1, b0 = 2 }; void f0 (enum E0 e) { switch (e) { case !(a0|b0): /* { dg-warning "not in enumerated type" } */ case a0|b0: /* { dg-warning "not in enumerated type" } */ default:; } } enum __attribute ((flag_enum)) E1 { a1 = 1, b1 = 2 }; void f1 (enum E1 e) { switch (e) { case !(a1|b1): /* { dg-bogus "not in enumerated type" } */ case a1|b1: /* { dg-bogus "not in enumerated type" } */ default:; } } enum [[gnu::flag_enum]] E2 { a2 = 1, b2 = 2 }; void f2 (enum E2 e) { switch (e) { case !(a2|b2): /* { dg-bogus "not in enumerated type" } */ case a2|b2: /* { dg-bogus "not in enumerated type" } */ default:; } } enum [[clang::flag_enum]] E3 { a3 = 1, b3 = 2 }; void f3 (enum E3 e) { switch (e) { case !(a3|b3): /* { dg-bogus "not in enumerated type" } */ case a3|b3: /* { dg-bogus "not in enumerated type" } */ default:; } }