| /* PR c/7652 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-Wimplicit-fallthrough" } */ |
| |
| extern void bar (int); |
| |
| /* Test if with else. */ |
| |
| void |
| f (int i) |
| { |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| bar (1); |
| else |
| bar (2); |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| bar (1); |
| else |
| bar (2); |
| bar (3); /* { dg-warning "statement may fall through" } */ |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| return; |
| else |
| bar (2); /* { dg-warning "statement may fall through" } */ |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| return; |
| else |
| bar (2); |
| bar (3); /* { dg-warning "statement may fall through" } */ |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| bar (1); |
| else |
| return; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| bar (1); |
| else |
| return; |
| bar (3); /* { dg-warning "statement may fall through" } */ |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| return; |
| else |
| return; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| return; |
| else |
| return; |
| bar (3); /* { dg-warning "statement may fall through" } */ |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| { |
| bar (1); |
| bar (2); |
| bar (3); |
| bar (4); |
| } |
| else |
| { |
| bar (5); |
| bar (6); |
| bar (7); |
| bar (8); |
| } |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| { |
| bar (1); |
| bar (2); |
| bar (3); |
| bar (4); |
| } |
| else |
| { |
| bar (5); |
| bar (6); |
| bar (7); |
| bar (8); |
| } |
| bar (9); /* { dg-warning "statement may fall through" } */ |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| { |
| } |
| else |
| bar (2); |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| bar (1); |
| else |
| { |
| } |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| { |
| } |
| else |
| { |
| } |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| return; |
| else |
| { |
| } |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| { |
| } |
| else |
| return; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| goto L1; |
| else |
| bar (2); /* { dg-warning "statement may fall through" } */ |
| case 2: |
| L1: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| goto L2; |
| else |
| bar (2); /* { dg-warning "statement may fall through" } */ |
| L2: |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| bar (1); |
| else |
| goto L3; |
| case 2: |
| L3: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) /* { dg-warning "statement may fall through" } */ |
| bar (1); |
| else |
| goto L4; |
| L4: |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| goto L5; |
| else |
| goto L5; |
| L5: |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| bar (1); |
| else |
| bar (2); |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| bar (1); |
| else |
| bar (2); |
| bar (3); |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| return; |
| else |
| bar (2); |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| return; |
| else |
| bar (2); |
| bar (3); |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| bar (1); |
| else |
| return; |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| bar (1); |
| else |
| return; |
| bar (3); |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| return; |
| else |
| return; |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| return; |
| else |
| return; |
| bar (3); |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| { |
| bar (1); |
| bar (2); |
| bar (3); |
| bar (4); |
| } |
| else |
| { |
| bar (5); |
| bar (6); |
| bar (7); |
| bar (8); |
| } |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| { |
| bar (1); |
| bar (2); |
| bar (3); |
| bar (4); |
| } |
| else |
| { |
| bar (5); |
| bar (6); |
| bar (7); |
| bar (8); |
| } |
| bar (9); |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| { |
| } |
| else |
| bar (2); |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| bar (1); |
| else |
| { |
| } |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| { |
| } |
| else |
| { |
| } |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| return; |
| else |
| { |
| } |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| { |
| } |
| else |
| return; |
| break; |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| goto L6; |
| else |
| bar (2); |
| break; |
| case 2: |
| L6: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| goto L7; |
| else |
| bar (2); |
| break; |
| L7: |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| bar (1); |
| else |
| goto L8; |
| break; |
| case 2: |
| L8: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| bar (1); |
| else |
| goto L9; |
| break; |
| L9: |
| case 2: |
| __builtin_abort (); |
| } |
| |
| switch (i) |
| { |
| case 1: |
| if (i) |
| goto L10; |
| else |
| goto L10; |
| break; |
| L10: |
| case 2: |
| __builtin_abort (); |
| } |
| } |