/* 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 (); } }