/* PR c/7652 */ /* { dg-do compile } */ /* { 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 } 23 } */ int a[i]; /* { dg-warning "statement may fall through" "" { target c++ } 24 } */ } case 2: bar (99); } switch (i) { case 1: for (int j = 0; j < 10; j++) /* { dg-warning "statement may fall through" "" { target c } 33 } */ map[j] = j; /* { dg-warning "statement may fall through" "" { target c++ } 34 } */ case 2: bar (99); } switch (i) { case 1: do /* { dg-warning "statement may fall through" "" { target c++ } 42 } */ bar (2); while (--i); /* { dg-warning "statement may fall through" "" { target c } 44 } */ case 2: bar (99); } switch (i) { case 1: { switch (i + 2) case 4: bar (1); /* { dg-warning "statement may fall through" } */ 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); } }