| /* PR c/7652 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-Wall -Wextra -Wpedantic" } */ |
| |
| extern void bar (int); |
| void |
| fn (int i) |
| { |
| __attribute__((fallthrough)) int j = 0; /* { dg-warning "ignored|attribute not followed" } */ |
| |
| if (j) |
| __attribute__((fallthrough)); /* { dg-error "invalid use" } */ |
| |
| __attribute__((fallthrough)); /* { dg-error "invalid use" } */ |
| switch (i) |
| { |
| __attribute__((fallthrough)); /* { dg-warning "statement will never" } */ |
| case 1: |
| i++; |
| __attribute__((fallthrough)); |
| case 2: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| bar (2); |
| else |
| __attribute__((fallthrough)); |
| case 3: |
| if (i > 1) |
| __attribute__((fallthrough)); |
| else |
| return; |
| case 4: |
| if (i) |
| __attribute__((fallthrough)); /* { dg-warning "not preceding" } */ |
| __attribute__((fallthrough)); |
| case 5: |
| ; |
| __attribute__((fallthrough)); |
| case 6: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| bar (6); |
| else |
| { |
| __attribute__((fallthrough)); |
| } |
| case 7: |
| if (i > 1) |
| { |
| __attribute__((fallthrough)); |
| } |
| else |
| bar (7); /* { dg-warning "statement may fall through" } */ |
| default: |
| --j; |
| } |
| |
| __attribute__((fallthrough)); /* { dg-error "invalid use" } */ |
| } |