/* PR c/7652 */ /* { dg-do compile } */ /* { dg-options "-Wall -Wextra -Wno-unused -Wno-implicit-fallthrough" } */ extern void bar (int); void fn (int i) { switch (i) { case 1: bar (1); __attribute__((used)); /* { dg-warning "empty declaration" "" { target c } .-1 } */ /* { dg-warning "ignored" "" { target c++ } .-2 } */ case 2: bar (1); __attribute__((foo)); /* { dg-warning "empty declaration" "" { target c } .-1 } */ /* { dg-warning "ignored" "" { target c++ } .-2 } */ case 3: bar (1); __attribute__((fallthrough)) /* { dg-warning "not followed" "" { target c } } */ case 4: /* { dg-error "expected" } */ bar (1); __attribute__((fallthrough)) 1; /* { dg-error "expected" "" { target c } .-1 } */ /* { dg-warning "not followed" "" { target *-*-* } .-2 } */ case 5: bar (1); __attribute__((fallthrough)) int i; /* { dg-warning "ignored|not followed" } */ case 6: bar (1); __attribute__((fallthrough ("x"))); /* { dg-warning "specified with a parameter" } */ case 7: bar (1); __attribute__((fallthrough, fallthrough)); /* { dg-warning "specified multiple times" } */ case 8: bar (1); __attribute__((fallthrough)); case 9: __attribute__((fallthrough)); /* { dg-warning "not preceding" "" { target *-*-* } .-1 } */ bar (1); case 10: bar (1); __attribute__((unused, fallthrough)); /* { dg-warning "attribute ignored" } */ case 11: bar (1); __attribute__((fallthrough, unused)); /* { dg-warning "attribute ignored" } */ default: bar (99); } }