/* PR c/7652 */ /* { dg-do compile } */ /* { dg-options "-Wimplicit-fallthrough" } */ extern void bar (int); /* Test nested scopes. */ void f (int i) { switch (i) { case 1: { int j; } case 2: bar (99); } switch (i) { case 1: { int j = 10; /* { dg-warning "statement may fall through" } */ } case 2: bar (99); } switch (i) { case 1: { int k = 9; k++; { int j = 10; j++; /* { dg-warning "statement may fall through" } */ } } case 2: bar (99); } switch (i) { case 1: { int k = 9; k++; { int j = 10; j++; { bar (1); /* { dg-warning "statement may fall through" } */ } } } case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); __attribute__((fallthrough)); } case 2: bar (99); } switch (i) { case 1: { int j = 0; { int k = j + 5; bar (k); __attribute__((fallthrough)); } } case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); return; } case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); goto L1; } L1: case 2: bar (99); } switch (i) { case 1: { /* { dg-warning "statement may fall through" "" { target c } } */ int j = 0; bar (j); if (j == 8) return; /* { dg-warning "statement may fall through" "" { target c++ } } */ } case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); if (j == 8) return; else return; } case 2: bar (99); } switch (i) { case 1: { /* { dg-warning "statement may fall through" "" { target c } } */ int j = 0; bar (j); if (j == 8) bar (1); else return; /* { dg-warning "statement may fall through" "" { target c++ } } */ } case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); if (j == 8) return; else bar (2); /* { dg-warning "statement may fall through" } */ } case 2: bar (99); } switch (i) { case 1: { /* { dg-warning "statement may fall through" "" { target c } } */ int j = 0; bar (j); if (j == 8) bar (1); else bar (2); /* { dg-warning "statement may fall through" "" { target c++ } } */ } case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); if (j == 8) return; } break; case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); if (j == 8) return; else return; } break; case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); if (j == 8) bar (1); else return; } break; case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); if (j == 8) return; else bar (2); } break; case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); if (j == 8) bar (1); else bar (2); } break; case 2: bar (99); } switch (i) { case 1: { int j = 9; while (1); } case 2: bar (99); } switch (i) { case 1: { /* { dg-warning "statement may fall through" "" { target c } } */ int j = 9; switch (j); /* { dg-warning "statement may fall through" "" { target c++ } } */ } case 2: bar (99); } switch (i) { case 1: { int j = 0; bar (j); if (j == 8) bar (1); else bar (2); __attribute__((fallthrough)); } case 2: bar (99); } }