From a7dc5980e91d758905750a5c0a533f689eca355e Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Mon, 23 May 2016 15:37:09 +0000 Subject: [PATCH] re PR c/49859 (gcc could warn about statements between "switch" and first "case") PR c/49859 * common.opt (Wswitch-unreachable): New option. * doc/invoke.texi: Document -Wswitch-unreachable. * gimplify.c (gimplify_switch_expr): Implement the -Wswitch-unreachable warning. * c-c++-common/Wswitch-unreachable-1.c: New test. * gcc.dg/Wswitch-unreachable-1.c: New test. * c-c++-common/goacc/sb-2.c (void foo): Add dg-warning. * g++.dg/cpp0x/lambda/lambda-switch.C (main): Likewise. * g++.dg/gomp/block-10.C: Likewise. * gcc.dg/gomp/block-10.c: Likewise. * g++.dg/gomp/block-9.C: Likewise. * gcc.dg/gomp/block-9.c: Likewise. * g++.dg/gomp/target-1.C: Likewise. * g++.dg/gomp/target-2.C: Likewise. * gcc.dg/gomp/target-1.c: Likewise. * gcc.dg/gomp/target-2.c: Likewise. * g++.dg/gomp/taskgroup-1.C: Likewise. * gcc.dg/gomp/taskgroup-1.c: Likewise. * gcc.dg/gomp/teams-1.c: Likewise. * g++.dg/gomp/teams-1.C: Likewise. * g++.dg/overload/error3.C: Likewise. * g++.dg/tm/jump1.C: Likewise. * g++.dg/torture/pr40335.C: Likewise. * gcc.dg/c99-vla-jump-5.c: Likewise. * gcc.dg/switch-warn-1.c: Likewise. * gcc.dg/Wjump-misses-init-1.c: Use -Wno-switch-unreachable. * gcc.dg/nested-func-1.c: Likewise. * gcc.dg/pr67784-4.c: Likewise. From-SVN: r236597 --- gcc/ChangeLog | 10 +- gcc/common.opt | 5 + gcc/doc/invoke.texi | 36 +++++- gcc/gimplify.c | 26 ++++ gcc/testsuite/ChangeLog | 28 +++++ .../c-c++-common/Wswitch-unreachable-1.c | 116 ++++++++++++++++++ gcc/testsuite/c-c++-common/goacc/sb-2.c | 6 +- .../g++.dg/cpp0x/lambda/lambda-switch.C | 2 +- gcc/testsuite/g++.dg/gomp/block-10.C | 12 +- gcc/testsuite/g++.dg/gomp/block-9.C | 2 +- gcc/testsuite/g++.dg/gomp/target-1.C | 2 +- gcc/testsuite/g++.dg/gomp/target-2.C | 2 +- gcc/testsuite/g++.dg/gomp/taskgroup-1.C | 2 +- gcc/testsuite/g++.dg/gomp/teams-1.C | 11 +- gcc/testsuite/g++.dg/overload/error3.C | 1 + gcc/testsuite/g++.dg/tm/jump1.C | 2 +- gcc/testsuite/g++.dg/torture/pr40335.C | 2 +- gcc/testsuite/gcc.dg/Wjump-misses-init-1.c | 2 +- gcc/testsuite/gcc.dg/Wswitch-unreachable-1.c | 35 ++++++ gcc/testsuite/gcc.dg/c99-vla-jump-5.c | 2 +- gcc/testsuite/gcc.dg/gomp/block-10.c | 12 +- gcc/testsuite/gcc.dg/gomp/block-9.c | 2 +- gcc/testsuite/gcc.dg/gomp/target-1.c | 2 +- gcc/testsuite/gcc.dg/gomp/target-2.c | 2 +- gcc/testsuite/gcc.dg/gomp/taskgroup-1.c | 2 +- gcc/testsuite/gcc.dg/gomp/teams-1.c | 4 +- gcc/testsuite/gcc.dg/nested-func-1.c | 2 +- gcc/testsuite/gcc.dg/pr67784-4.c | 2 +- gcc/testsuite/gcc.dg/switch-warn-1.c | 2 +- 29 files changed, 294 insertions(+), 40 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/Wswitch-unreachable-1.c create mode 100644 gcc/testsuite/gcc.dg/Wswitch-unreachable-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 311e632fd65..d838407bc0b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,12 @@ -2016-05-23 Bin Cheng +2016-05-23 Marek Polacek + + PR c/49859 + * common.opt (Wswitch-unreachable): New option. + * doc/invoke.texi: Document -Wswitch-unreachable. + * gimplify.c (gimplify_switch_expr): Implement the -Wswitch-unreachable + warning. + +2016-05-23 Bin Cheng * tree-ssa-address.c (copy_ref_info): Check NULL TMR_STEP when TMR_INDEX is non-NULL. diff --git a/gcc/common.opt b/gcc/common.opt index 682cb417e3d..fccd4b5f9a5 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -707,6 +707,11 @@ Wsuggest-final-methods Common Var(warn_suggest_final_methods) Warning Warn about C++ virtual methods where adding final keyword would improve code quality. +Wswitch-unreachable +Common Var(warn_switch_unreachable) Warning Init(1) +Warn about statements between switch's controlling expression and the first +case. + Wsystem-headers Common Var(warn_system_headers) Warning Do not suppress warnings from system headers. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index f3d087f9cad..d2dfdd9914f 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -297,7 +297,8 @@ Objective-C and Objective-C++ Dialects}. -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol -Wsuggest-final-types @gol -Wsuggest-final-methods -Wsuggest-override @gol -Wmissing-format-attribute -Wsubobject-linkage @gol --Wswitch -Wswitch-default -Wswitch-enum -Wswitch-bool -Wsync-nand @gol +-Wswitch -Wswitch-bool -Wswitch-default -Wswitch-enum @gol +-Wswitch-unreachable -Wsync-nand @gol -Wsystem-headers -Wtautological-compare -Wtrampolines -Wtrigraphs @gol -Wtype-limits -Wundef @gol -Wuninitialized -Wunknown-pragmas -Wunsafe-loop-optimizations @gol @@ -4144,6 +4145,39 @@ switch ((int) (a == 4)) @end smallexample This warning is enabled by default for C and C++ programs. +@item -Wswitch-unreachable +@opindex Wswitch-unreachable +@opindex Wno-switch-unreachable +Warn whenever a @code{switch} statement contains statements between the +controlling expression and the first case label, which will never be +executed. For example: +@smallexample +@group +switch (cond) + @{ + i = 15; + @dots{} + case 5: + @dots{} + @} +@end group +@end smallexample +@option{-Wswitch-unreachable} does not warn if the statement between the +controlling expression and the first case label is just a declaration: +@smallexample +@group +switch (cond) + @{ + int i; + @dots{} + case 5: + i = 5; + @dots{} + @} +@end group +@end smallexample +This warning is enabled by default for C and C++ programs. + @item -Wsync-nand @r{(C and C++ only)} @opindex Wsync-nand @opindex Wno-sync-nand diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 4a544e3c8ee..6473544251c 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -1595,6 +1595,32 @@ gimplify_switch_expr (tree *expr_p, gimple_seq *pre_p) gimplify_ctxp->case_labels.create (8); gimplify_stmt (&SWITCH_BODY (switch_expr), &switch_body_seq); + + /* Possibly warn about unreachable statements between switch's + controlling expression and the first case. */ + if (warn_switch_unreachable + /* This warning doesn't play well with Fortran when optimizations + are on. */ + && !lang_GNU_Fortran () + && switch_body_seq != NULL) + { + gimple_seq seq = switch_body_seq; + if (gimple_code (switch_body_seq) == GIMPLE_BIND) + seq = gimple_bind_body (as_a (switch_body_seq)); + gimple *stmt = gimple_seq_first_stmt (seq); + enum gimple_code code = gimple_code (stmt); + if (code != GIMPLE_LABEL && code != GIMPLE_TRY) + { + if (code == GIMPLE_GOTO + && TREE_CODE (gimple_goto_dest (stmt)) == LABEL_DECL + && DECL_ARTIFICIAL (gimple_goto_dest (stmt))) + /* Don't warn for compiler-generated gotos. These occur + in Duff's devices, for example. */; + else + warning_at (gimple_location (stmt), OPT_Wswitch_unreachable, + "statement will never be executed"); + } + } labels = gimplify_ctxp->case_labels; gimplify_ctxp->case_labels = saved_labels; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2cffaa1a85b..5a5c7b8515f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,31 @@ +2016-05-23 Marek Polacek + + PR c/49859 + * c-c++-common/Wswitch-unreachable-1.c: New test. + * gcc.dg/Wswitch-unreachable-1.c: New test. + * c-c++-common/goacc/sb-2.c (void foo): Add dg-warning. + * g++.dg/cpp0x/lambda/lambda-switch.C (main): Likewise. + * g++.dg/gomp/block-10.C: Likewise. + * gcc.dg/gomp/block-10.c: Likewise. + * g++.dg/gomp/block-9.C: Likewise. + * gcc.dg/gomp/block-9.c: Likewise. + * g++.dg/gomp/target-1.C: Likewise. + * g++.dg/gomp/target-2.C: Likewise. + * gcc.dg/gomp/target-1.c: Likewise. + * gcc.dg/gomp/target-2.c: Likewise. + * g++.dg/gomp/taskgroup-1.C: Likewise. + * gcc.dg/gomp/taskgroup-1.c: Likewise. + * gcc.dg/gomp/teams-1.c: Likewise. + * g++.dg/gomp/teams-1.C: Likewise. + * g++.dg/overload/error3.C: Likewise. + * g++.dg/tm/jump1.C: Likewise. + * g++.dg/torture/pr40335.C: Likewise. + * gcc.dg/c99-vla-jump-5.c: Likewise. + * gcc.dg/switch-warn-1.c: Likewise. + * gcc.dg/Wjump-misses-init-1.c: Use -Wno-switch-unreachable. + * gcc.dg/nested-func-1.c: Likewise. + * gcc.dg/pr67784-4.c: Likewise. + 2016-05-23 Richard Biener PR tree-optimization/71230 diff --git a/gcc/testsuite/c-c++-common/Wswitch-unreachable-1.c b/gcc/testsuite/c-c++-common/Wswitch-unreachable-1.c new file mode 100644 index 00000000000..ee6ecc1c37c --- /dev/null +++ b/gcc/testsuite/c-c++-common/Wswitch-unreachable-1.c @@ -0,0 +1,116 @@ +/* PR c/49859 */ +/* { dg-do compile } */ + +extern void foo (int); +extern int j; + +void +fn0 (int i) +{ + switch (i) + { + int k; + case 1: + k = 11; + foo (k); + } + + switch (i) + j = 10; /* { dg-warning "statement will never be executed" } */ + + switch (i) + ; + + switch (i) + { + j = 12; /* { dg-warning "statement will never be executed" } */ + default: + foo (j); + } + + int o; + switch (i) + { + o = 333; /* { dg-warning "statement will never be executed" } */ + case 4: break; + default: + foo (o); + } + + switch (i) + switch (j) /* { dg-warning "statement will never be executed" } */ + { + o = 42; /* { dg-warning "statement will never be executed" } */ + case 8:; + } + + switch (i) + { + int l = 3; /* { dg-warning "statement will never be executed" } */ + o = 5; + j = 7; + ++l; + } + + switch (i) + { + int x; + int l = 3; /* { dg-warning "statement will never be executed" } */ + ++l, ++x; + } + + switch (i) + if (j != 3) /* { dg-warning "statement will never be executed" } */ + foo (j); + + switch (i) + while (1) + foo (0); + + switch (i) + while (i > 5) { } + + switch (i) + goto X; /* { dg-warning "statement will never be executed" } */ +X: + + switch (i) + do + foo (1); + while (1); + + switch (i) + for (;;) + foo (-1); + + switch (i) + default: + j = 6; + + switch (i) + { + typedef int T; + case 3: + { + T x = 5; + foo (x); + } + } + + switch (i) + { + static int g; + default: + foo (g); + } + + switch (i) + { +L: + j = 16; + default: + if (j < 5) + goto L; + break; + } +} diff --git a/gcc/testsuite/c-c++-common/goacc/sb-2.c b/gcc/testsuite/c-c++-common/goacc/sb-2.c index a6760ec73f8..e986af3bb27 100644 --- a/gcc/testsuite/c-c++-common/goacc/sb-2.c +++ b/gcc/testsuite/c-c++-common/goacc/sb-2.c @@ -4,19 +4,19 @@ void foo(int i) { switch (i) // { dg-error "invalid entry to OpenACC structured block" } { - #pragma acc parallel + #pragma acc parallel // { dg-warning "statement will never be executed" } { case 0:; } } switch (i) // { dg-error "invalid entry to OpenACC structured block" } { - #pragma acc kernels + #pragma acc kernels // { dg-warning "statement will never be executed" } { case 0:; } } switch (i) // { dg-error "invalid entry to OpenACC structured block" } { - #pragma acc data + #pragma acc data // { dg-warning "statement will never be executed" } { case 0:; } } } diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C index 1cac211dd4c..d71d3ade2ac 100644 --- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C @@ -20,7 +20,7 @@ main () { case 3: // { dg-error "case" } break; // { dg-error "break" } - }; + }; // { dg-warning "statement will never be executed" } } } } diff --git a/gcc/testsuite/g++.dg/gomp/block-10.C b/gcc/testsuite/g++.dg/gomp/block-10.C index b273c1f297c..4aa41cdf2e2 100644 --- a/gcc/testsuite/g++.dg/gomp/block-10.C +++ b/gcc/testsuite/g++.dg/gomp/block-10.C @@ -5,28 +5,28 @@ void foo(int i) int j; switch (i) { - #pragma omp parallel + #pragma omp parallel // { dg-warning "statement will never be executed" } { case 0:; } // { dg-error "jump|enters" } } switch (i) { - #pragma omp for + #pragma omp for // { dg-warning "statement will never be executed" } for (j = 0; j < 10; ++ j) { case 1:; } // { dg-error "jump|enters" } } switch (i) { - #pragma omp critical + #pragma omp critical // { dg-warning "statement will never be executed" } { case 2:; } // { dg-error "jump|enters" } } switch (i) { - #pragma omp master + #pragma omp master // { dg-warning "statement will never be executed" } { case 3:; } // { dg-error "jump|enters" } } switch (i) { - #pragma omp sections + #pragma omp sections // { dg-warning "statement will never be executed" } { case 4:; // { dg-error "jump|enters" } #pragma omp section { case 5:; } // { dg-error "jump|enters" } @@ -34,7 +34,7 @@ void foo(int i) } switch (i) { - #pragma omp ordered + #pragma omp ordered // { dg-warning "statement will never be executed" } { default:; } // { dg-error "jump|enters" } } } diff --git a/gcc/testsuite/g++.dg/gomp/block-9.C b/gcc/testsuite/g++.dg/gomp/block-9.C index 8012e5a7d46..1de40a983f9 100644 --- a/gcc/testsuite/g++.dg/gomp/block-9.C +++ b/gcc/testsuite/g++.dg/gomp/block-9.C @@ -5,7 +5,7 @@ void foo(int i) int j; switch (i) { - #pragma omp parallel + #pragma omp parallel // { dg-warning "statement will never be executed" } { case 0:; } // { dg-error "jump|enters" } #pragma omp for for (j = 0; j < 10; ++ j) diff --git a/gcc/testsuite/g++.dg/gomp/target-1.C b/gcc/testsuite/g++.dg/gomp/target-1.C index bcdac61ee31..97508739d8c 100644 --- a/gcc/testsuite/g++.dg/gomp/target-1.C +++ b/gcc/testsuite/g++.dg/gomp/target-1.C @@ -24,7 +24,7 @@ foo (int x) switch (x) { - #pragma omp target + #pragma omp target // { dg-warning "statement will never be executed" } { case 0:; } // { dg-error "jump" } // { dg-message "enters" "" { target *-*-* } 28 } } diff --git a/gcc/testsuite/g++.dg/gomp/target-2.C b/gcc/testsuite/g++.dg/gomp/target-2.C index 273f8d50fef..333b4d0f7fc 100644 --- a/gcc/testsuite/g++.dg/gomp/target-2.C +++ b/gcc/testsuite/g++.dg/gomp/target-2.C @@ -24,7 +24,7 @@ foo (int x, int y) switch (x) { - #pragma omp target data map(tofrom: y) + #pragma omp target data map(tofrom: y) // { dg-warning "statement will never be executed" } { case 0:; } // { dg-error "jump" } // { dg-message "enters" "" { target *-*-* } 28 } } diff --git a/gcc/testsuite/g++.dg/gomp/taskgroup-1.C b/gcc/testsuite/g++.dg/gomp/taskgroup-1.C index e15d59d947a..5542a4e4fd2 100644 --- a/gcc/testsuite/g++.dg/gomp/taskgroup-1.C +++ b/gcc/testsuite/g++.dg/gomp/taskgroup-1.C @@ -24,7 +24,7 @@ foo (int x) switch (x) { - #pragma omp taskgroup + #pragma omp taskgroup // { dg-warning "statement will never be executed" } { case 0:; } // { dg-error "jump" } // { dg-message "enters" "" { target *-*-* } 28 } } diff --git a/gcc/testsuite/g++.dg/gomp/teams-1.C b/gcc/testsuite/g++.dg/gomp/teams-1.C index 2b00bb61473..d0460c3c22c 100644 --- a/gcc/testsuite/g++.dg/gomp/teams-1.C +++ b/gcc/testsuite/g++.dg/gomp/teams-1.C @@ -26,6 +26,7 @@ foo (int x) { #pragma omp target teams { case 0:; } // { dg-error "jump" } + // { dg-warning "statement will never be executed" "" { target *-*-* } 28 } // { dg-message "enters" "" { target *-*-* } 28 } } } @@ -43,7 +44,7 @@ bar (int x) #pragma omp teams { bad2: ; // { dg-error "jump to label" } - // { dg-message "enters OpenMP" "" { target *-*-* } 45 } + // { dg-message "enters OpenMP" "" { target *-*-* } 46 } } #pragma omp target @@ -57,14 +58,14 @@ bar (int x) switch (x) { - #pragma omp target + #pragma omp target // { dg-warning "statement will never be executed" } #pragma omp teams { case 0:; } // { dg-error "jump" } - // { dg-message "enters" "" { target *-*-* } 62 } + // { dg-message "enters" "" { target *-*-* } 63 } } } // { dg-error "invalid branch to/from OpenMP structured block" "" { target *-*-* } 8 } // { dg-error "invalid entry to OpenMP structured block" "" { target *-*-* } 10 } -// { dg-error "invalid branch to/from OpenMP structured block" "" { target *-*-* } 39 } -// { dg-error "invalid entry to OpenMP structured block" "" { target *-*-* } 41 } +// { dg-error "invalid branch to/from OpenMP structured block" "" { target *-*-* } 40 } +// { dg-error "invalid entry to OpenMP structured block" "" { target *-*-* } 42 } diff --git a/gcc/testsuite/g++.dg/overload/error3.C b/gcc/testsuite/g++.dg/overload/error3.C index e0003dd8813..8391875150b 100644 --- a/gcc/testsuite/g++.dg/overload/error3.C +++ b/gcc/testsuite/g++.dg/overload/error3.C @@ -35,6 +35,7 @@ class MainWindow { void MainWindow::update_status(Result result) { switch (result) { status_frame.modify_bg(Gtk::STATE_NORMAL,Gdk::Color::Color("green")); // { dg-error "" } + // { dg-warning "statement will never be executed" "" { target *-*-* } 37 } status_frame.modify_bg(Gtk::STATE_NORMAL,Gdk::Color::Color("red")); // { dg-error "" } status_label.set_text("Out of memory"); } diff --git a/gcc/testsuite/g++.dg/tm/jump1.C b/gcc/testsuite/g++.dg/tm/jump1.C index 003eed034c9..e28282dc624 100644 --- a/gcc/testsuite/g++.dg/tm/jump1.C +++ b/gcc/testsuite/g++.dg/tm/jump1.C @@ -14,7 +14,7 @@ void f() switch (i) { - synchronized { + synchronized { // { dg-warning "statement will never be executed" } ++i; case 42: // { dg-error "" } ++i; diff --git a/gcc/testsuite/g++.dg/torture/pr40335.C b/gcc/testsuite/g++.dg/torture/pr40335.C index 14ea95d4086..295a356d3fa 100644 --- a/gcc/testsuite/g++.dg/torture/pr40335.C +++ b/gcc/testsuite/g++.dg/torture/pr40335.C @@ -8,7 +8,7 @@ main (void) switch ((signed char) i) { case 255: /* { dg-bogus "exceeds maximum value" "" { xfail *-*-* } } */ - abort (); + abort (); /* { dg-warning "statement will never be executed" } */ default: break; } diff --git a/gcc/testsuite/gcc.dg/Wjump-misses-init-1.c b/gcc/testsuite/gcc.dg/Wjump-misses-init-1.c index 86117f1f2f0..71809be5933 100644 --- a/gcc/testsuite/gcc.dg/Wjump-misses-init-1.c +++ b/gcc/testsuite/gcc.dg/Wjump-misses-init-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-Wjump-misses-init" } */ +/* { dg-options "-Wjump-misses-init -Wno-switch-unreachable" } */ int f1 (int a) { diff --git a/gcc/testsuite/gcc.dg/Wswitch-unreachable-1.c b/gcc/testsuite/gcc.dg/Wswitch-unreachable-1.c new file mode 100644 index 00000000000..2e5c99bce3c --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wswitch-unreachable-1.c @@ -0,0 +1,35 @@ +/* PR c/49859 */ +/* { dg-do compile } */ +/* { dg-options "-Wswitch-unreachable" } */ + +extern void foo (int); +extern int j; + +void +fn0 (int i) +{ + switch (i) + { + int t = 10; /* { dg-warning "statement will never be executed" } */ + default: + foo (t); + } + + switch (i) + { /* { dg-warning "statement will never be executed" } */ + int A[i]; + default: /* { dg-error "switch jumps into scope" } */ + break; + } + + switch (i) + default: + j = sizeof (struct { int i; }); + + switch (i) + { + int A[3]; + default: + break; + } +} diff --git a/gcc/testsuite/gcc.dg/c99-vla-jump-5.c b/gcc/testsuite/gcc.dg/c99-vla-jump-5.c index fc5e04d1b9e..5b5fc74f2e9 100644 --- a/gcc/testsuite/gcc.dg/c99-vla-jump-5.c +++ b/gcc/testsuite/gcc.dg/c99-vla-jump-5.c @@ -14,7 +14,7 @@ void f (int a, int b) { - switch (a) { + switch (a) { /* { dg-warning "statement will never be executed" } */ int v[b]; case 2: /* { dg-error "switch jumps into scope of identifier with variably modified type" } */ default: /* { dg-error "switch jumps into scope of identifier with variably modified type" } */ diff --git a/gcc/testsuite/gcc.dg/gomp/block-10.c b/gcc/testsuite/gcc.dg/gomp/block-10.c index 69ae3c0cf6e..29c2d91431f 100644 --- a/gcc/testsuite/gcc.dg/gomp/block-10.c +++ b/gcc/testsuite/gcc.dg/gomp/block-10.c @@ -5,28 +5,28 @@ void foo(int i) int j; switch (i) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp parallel + #pragma omp parallel // { dg-warning "statement will never be executed" } { case 0:; } } switch (i) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp for + #pragma omp for // { dg-warning "statement will never be executed" } for (j = 0; j < 10; ++ j) { case 1:; } } switch (i) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp critical + #pragma omp critical // { dg-warning "statement will never be executed" } { case 2:; } } switch (i) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp master + #pragma omp master // { dg-warning "statement will never be executed" } { case 3:; } } switch (i) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp sections + #pragma omp sections // { dg-warning "statement will never be executed" } { case 4:; #pragma omp section { case 5:; } @@ -34,7 +34,7 @@ void foo(int i) } switch (i) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp ordered + #pragma omp ordered // { dg-warning "statement will never be executed" } { default:; } } } diff --git a/gcc/testsuite/gcc.dg/gomp/block-9.c b/gcc/testsuite/gcc.dg/gomp/block-9.c index 2fae3deafd5..202599f2ae2 100644 --- a/gcc/testsuite/gcc.dg/gomp/block-9.c +++ b/gcc/testsuite/gcc.dg/gomp/block-9.c @@ -5,7 +5,7 @@ void foo(int i) int j; switch (i) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp parallel + #pragma omp parallel // { dg-warning "statement will never be executed" } { case 0:; } #pragma omp for for (j = 0; j < 10; ++ j) diff --git a/gcc/testsuite/gcc.dg/gomp/target-1.c b/gcc/testsuite/gcc.dg/gomp/target-1.c index aaa6a145779..6bc5eb9493e 100644 --- a/gcc/testsuite/gcc.dg/gomp/target-1.c +++ b/gcc/testsuite/gcc.dg/gomp/target-1.c @@ -23,7 +23,7 @@ foo (int x) switch (x) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp target + #pragma omp target // { dg-warning "statement will never be executed" } { case 0:; } } } diff --git a/gcc/testsuite/gcc.dg/gomp/target-2.c b/gcc/testsuite/gcc.dg/gomp/target-2.c index 3a7afc4892b..c5c38d8b537 100644 --- a/gcc/testsuite/gcc.dg/gomp/target-2.c +++ b/gcc/testsuite/gcc.dg/gomp/target-2.c @@ -23,7 +23,7 @@ foo (int x, int y) switch (x) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp target data map(tofrom: y) + #pragma omp target data map(tofrom: y) // { dg-warning "statement will never be executed" } { case 0:; } } } diff --git a/gcc/testsuite/gcc.dg/gomp/taskgroup-1.c b/gcc/testsuite/gcc.dg/gomp/taskgroup-1.c index 1997e0c158d..f39b7ef7255 100644 --- a/gcc/testsuite/gcc.dg/gomp/taskgroup-1.c +++ b/gcc/testsuite/gcc.dg/gomp/taskgroup-1.c @@ -23,7 +23,7 @@ foo (int x) switch (x) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp taskgroup + #pragma omp taskgroup // { dg-warning "statement will never be executed" } { case 0:; } } } diff --git a/gcc/testsuite/gcc.dg/gomp/teams-1.c b/gcc/testsuite/gcc.dg/gomp/teams-1.c index ad5b100efc9..a5370470cde 100644 --- a/gcc/testsuite/gcc.dg/gomp/teams-1.c +++ b/gcc/testsuite/gcc.dg/gomp/teams-1.c @@ -24,7 +24,7 @@ foo (int x) switch (x) // { dg-error "invalid entry to OpenMP structured block" } { #pragma omp target teams - { case 0:; } + { case 0:; } // { dg-warning "statement will never be executed" } } } @@ -54,7 +54,7 @@ bar (int x) switch (x) // { dg-error "invalid entry to OpenMP structured block" } { - #pragma omp target + #pragma omp target // { dg-warning "statement will never be executed" } #pragma omp teams { case 0:; } } diff --git a/gcc/testsuite/gcc.dg/nested-func-1.c b/gcc/testsuite/gcc.dg/nested-func-1.c index cb26e895e5c..2052a6f40da 100644 --- a/gcc/testsuite/gcc.dg/nested-func-1.c +++ b/gcc/testsuite/gcc.dg/nested-func-1.c @@ -1,7 +1,7 @@ /* Test for proper errors for break and continue in nested functions. */ /* Origin: Joseph Myers */ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-Wno-switch-unreachable" } */ void foo (int a) diff --git a/gcc/testsuite/gcc.dg/pr67784-4.c b/gcc/testsuite/gcc.dg/pr67784-4.c index 81a43fddd11..54620802a90 100644 --- a/gcc/testsuite/gcc.dg/pr67784-4.c +++ b/gcc/testsuite/gcc.dg/pr67784-4.c @@ -1,6 +1,6 @@ /* PR c/67784 */ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-Wno-switch-unreachable" } */ typedef int T; diff --git a/gcc/testsuite/gcc.dg/switch-warn-1.c b/gcc/testsuite/gcc.dg/switch-warn-1.c index 04ca4e36765..58fbd7d4860 100644 --- a/gcc/testsuite/gcc.dg/switch-warn-1.c +++ b/gcc/testsuite/gcc.dg/switch-warn-1.c @@ -11,7 +11,7 @@ foo1 (unsigned char i) { switch (i) { - case -1: /* { dg-warning "case label value is less than minimum value for type" } */ + case -1: /* { dg-warning "case label value is less than minimum value for type|statement will never be executed" } */ return 1; case 256: /* { dg-warning "case label value exceeds maximum value for type" } */ return 2; -- 2.30.2