| /* PR c/7652 */ | |
| /* { dg-do compile } */ | |
| /* { dg-require-effective-target alloca } */ | |
| /* { dg-options "-Wimplicit-fallthrough" } */ | |
| extern void bar (int); | |
| extern int bar2 (void); | |
| extern int *map; | |
| void | |
| f (int i) | |
| { | |
| switch (i) | |
| { | |
| case 1: | |
| bar (0); /* { dg-warning "statement may fall through" } */ | |
| static int i = 10; | |
| case 2: | |
| bar (99); | |
| } | |
| switch (i) | |
| { | |
| case 1: | |
| { /* { dg-warning "statement may fall through" "" { target c } } */ | |
| int a[i]; | |
| } /* { dg-warning "statement may fall through" "" { target c++ } } */ | |
| case 2: | |
| bar (99); | |
| } | |
| switch (i) | |
| { | |
| case 1: | |
| for (int j = 0; j < 10; j++) /* { dg-warning "statement may fall through" "" { target c } } */ | |
| map[j] = j; /* { dg-warning "statement may fall through" "" { target c++ } } */ | |
| case 2: | |
| bar (99); | |
| } | |
| switch (i) | |
| { | |
| case 1: | |
| do | |
| bar (2); | |
| while (--i); /* { dg-warning "statement may fall through" } */ | |
| case 2: | |
| bar (99); | |
| } | |
| switch (i) | |
| { | |
| case 1: | |
| { | |
| switch (i + 2) /* { dg-warning "statement may fall through" } */ | |
| case 4: | |
| bar (1); | |
| case 5: | |
| bar (5); | |
| return; | |
| } | |
| case 2: | |
| bar (99); | |
| } | |
| switch (i) | |
| { | |
| case 1:; | |
| case 2:; | |
| } | |
| switch (i) | |
| { | |
| } | |
| switch (i) | |
| { | |
| case 1: | |
| if (i & 1) /* { dg-warning "statement may fall through" } */ | |
| { | |
| bar (23); | |
| break; | |
| } | |
| case 2: | |
| bar (99); | |
| } | |
| switch (i) | |
| { | |
| case 1: | |
| if (i > 9) /* { dg-warning "statement may fall through" } */ | |
| { | |
| bar (9); | |
| if (i == 10) | |
| { | |
| bar (10); | |
| break; | |
| } | |
| } | |
| case 2: | |
| bar (99); | |
| } | |
| int r; | |
| switch (i) | |
| { | |
| case 1: | |
| r = bar2 (); | |
| if (r) /* { dg-warning "statement may fall through" } */ | |
| break; | |
| case 2: | |
| bar (99); | |
| } | |
| switch (i) | |
| { | |
| case 1: | |
| r = bar2 (); | |
| if (r) | |
| return; | |
| if (!i) /* { dg-warning "statement may fall through" } */ | |
| return; | |
| case 2: | |
| bar (99); | |
| } | |
| } |