Commit a7dc5980 by Marek Polacek

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
parent 7e5a3c96
2016-05-23 Bin Cheng <bin.cheng@arm.com> 2016-05-23 Marek Polacek <polacek@redhat.com>
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 <bin.cheng@arm.com>
* tree-ssa-address.c (copy_ref_info): Check NULL TMR_STEP when * tree-ssa-address.c (copy_ref_info): Check NULL TMR_STEP when
TMR_INDEX is non-NULL. TMR_INDEX is non-NULL.
......
...@@ -707,6 +707,11 @@ Wsuggest-final-methods ...@@ -707,6 +707,11 @@ Wsuggest-final-methods
Common Var(warn_suggest_final_methods) Warning Common Var(warn_suggest_final_methods) Warning
Warn about C++ virtual methods where adding final keyword would improve code quality. 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 Wsystem-headers
Common Var(warn_system_headers) Warning Common Var(warn_system_headers) Warning
Do not suppress warnings from system headers. Do not suppress warnings from system headers.
......
...@@ -297,7 +297,8 @@ Objective-C and Objective-C++ Dialects}. ...@@ -297,7 +297,8 @@ Objective-C and Objective-C++ Dialects}.
-Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol
-Wsuggest-final-types @gol -Wsuggest-final-methods -Wsuggest-override @gol -Wsuggest-final-types @gol -Wsuggest-final-methods -Wsuggest-override @gol
-Wmissing-format-attribute -Wsubobject-linkage @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 -Wsystem-headers -Wtautological-compare -Wtrampolines -Wtrigraphs @gol
-Wtype-limits -Wundef @gol -Wtype-limits -Wundef @gol
-Wuninitialized -Wunknown-pragmas -Wunsafe-loop-optimizations @gol -Wuninitialized -Wunknown-pragmas -Wunsafe-loop-optimizations @gol
...@@ -4144,6 +4145,39 @@ switch ((int) (a == 4)) ...@@ -4144,6 +4145,39 @@ switch ((int) (a == 4))
@end smallexample @end smallexample
This warning is enabled by default for C and C++ programs. 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)} @item -Wsync-nand @r{(C and C++ only)}
@opindex Wsync-nand @opindex Wsync-nand
@opindex Wno-sync-nand @opindex Wno-sync-nand
......
...@@ -1595,6 +1595,32 @@ gimplify_switch_expr (tree *expr_p, gimple_seq *pre_p) ...@@ -1595,6 +1595,32 @@ gimplify_switch_expr (tree *expr_p, gimple_seq *pre_p)
gimplify_ctxp->case_labels.create (8); gimplify_ctxp->case_labels.create (8);
gimplify_stmt (&SWITCH_BODY (switch_expr), &switch_body_seq); 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 <gbind *> (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; labels = gimplify_ctxp->case_labels;
gimplify_ctxp->case_labels = saved_labels; gimplify_ctxp->case_labels = saved_labels;
......
2016-05-23 Marek Polacek <polacek@redhat.com>
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 <rguenther@suse.de> 2016-05-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/71230 PR tree-optimization/71230
......
/* 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;
}
}
...@@ -4,19 +4,19 @@ void foo(int i) ...@@ -4,19 +4,19 @@ void foo(int i)
{ {
switch (i) // { dg-error "invalid entry to OpenACC structured block" } 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:; } { case 0:; }
} }
switch (i) // { dg-error "invalid entry to OpenACC structured block" } 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:; } { case 0:; }
} }
switch (i) // { dg-error "invalid entry to OpenACC structured block" } 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:; } { case 0:; }
} }
} }
...@@ -20,7 +20,7 @@ main () ...@@ -20,7 +20,7 @@ main ()
{ {
case 3: // { dg-error "case" } case 3: // { dg-error "case" }
break; // { dg-error "break" } break; // { dg-error "break" }
}; }; // { dg-warning "statement will never be executed" }
} }
} }
} }
...@@ -5,28 +5,28 @@ void foo(int i) ...@@ -5,28 +5,28 @@ void foo(int i)
int j; int j;
switch (i) switch (i)
{ {
#pragma omp parallel #pragma omp parallel // { dg-warning "statement will never be executed" }
{ case 0:; } // { dg-error "jump|enters" } { case 0:; } // { dg-error "jump|enters" }
} }
switch (i) switch (i)
{ {
#pragma omp for #pragma omp for // { dg-warning "statement will never be executed" }
for (j = 0; j < 10; ++ j) for (j = 0; j < 10; ++ j)
{ case 1:; } // { dg-error "jump|enters" } { case 1:; } // { dg-error "jump|enters" }
} }
switch (i) switch (i)
{ {
#pragma omp critical #pragma omp critical // { dg-warning "statement will never be executed" }
{ case 2:; } // { dg-error "jump|enters" } { case 2:; } // { dg-error "jump|enters" }
} }
switch (i) switch (i)
{ {
#pragma omp master #pragma omp master // { dg-warning "statement will never be executed" }
{ case 3:; } // { dg-error "jump|enters" } { case 3:; } // { dg-error "jump|enters" }
} }
switch (i) switch (i)
{ {
#pragma omp sections #pragma omp sections // { dg-warning "statement will never be executed" }
{ case 4:; // { dg-error "jump|enters" } { case 4:; // { dg-error "jump|enters" }
#pragma omp section #pragma omp section
{ case 5:; } // { dg-error "jump|enters" } { case 5:; } // { dg-error "jump|enters" }
...@@ -34,7 +34,7 @@ void foo(int i) ...@@ -34,7 +34,7 @@ void foo(int i)
} }
switch (i) switch (i)
{ {
#pragma omp ordered #pragma omp ordered // { dg-warning "statement will never be executed" }
{ default:; } // { dg-error "jump|enters" } { default:; } // { dg-error "jump|enters" }
} }
} }
...@@ -5,7 +5,7 @@ void foo(int i) ...@@ -5,7 +5,7 @@ void foo(int i)
int j; int j;
switch (i) switch (i)
{ {
#pragma omp parallel #pragma omp parallel // { dg-warning "statement will never be executed" }
{ case 0:; } // { dg-error "jump|enters" } { case 0:; } // { dg-error "jump|enters" }
#pragma omp for #pragma omp for
for (j = 0; j < 10; ++ j) for (j = 0; j < 10; ++ j)
......
...@@ -24,7 +24,7 @@ foo (int x) ...@@ -24,7 +24,7 @@ foo (int x)
switch (x) switch (x)
{ {
#pragma omp target #pragma omp target // { dg-warning "statement will never be executed" }
{ case 0:; } // { dg-error "jump" } { case 0:; } // { dg-error "jump" }
// { dg-message "enters" "" { target *-*-* } 28 } // { dg-message "enters" "" { target *-*-* } 28 }
} }
......
...@@ -24,7 +24,7 @@ foo (int x, int y) ...@@ -24,7 +24,7 @@ foo (int x, int y)
switch (x) 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" } { case 0:; } // { dg-error "jump" }
// { dg-message "enters" "" { target *-*-* } 28 } // { dg-message "enters" "" { target *-*-* } 28 }
} }
......
...@@ -24,7 +24,7 @@ foo (int x) ...@@ -24,7 +24,7 @@ foo (int x)
switch (x) switch (x)
{ {
#pragma omp taskgroup #pragma omp taskgroup // { dg-warning "statement will never be executed" }
{ case 0:; } // { dg-error "jump" } { case 0:; } // { dg-error "jump" }
// { dg-message "enters" "" { target *-*-* } 28 } // { dg-message "enters" "" { target *-*-* } 28 }
} }
......
...@@ -26,6 +26,7 @@ foo (int x) ...@@ -26,6 +26,7 @@ foo (int x)
{ {
#pragma omp target teams #pragma omp target teams
{ case 0:; } // { dg-error "jump" } { case 0:; } // { dg-error "jump" }
// { dg-warning "statement will never be executed" "" { target *-*-* } 28 }
// { dg-message "enters" "" { target *-*-* } 28 } // { dg-message "enters" "" { target *-*-* } 28 }
} }
} }
...@@ -43,7 +44,7 @@ bar (int x) ...@@ -43,7 +44,7 @@ bar (int x)
#pragma omp teams #pragma omp teams
{ {
bad2: ; // { dg-error "jump to label" } bad2: ; // { dg-error "jump to label" }
// { dg-message "enters OpenMP" "" { target *-*-* } 45 } // { dg-message "enters OpenMP" "" { target *-*-* } 46 }
} }
#pragma omp target #pragma omp target
...@@ -57,14 +58,14 @@ bar (int x) ...@@ -57,14 +58,14 @@ bar (int x)
switch (x) switch (x)
{ {
#pragma omp target #pragma omp target // { dg-warning "statement will never be executed" }
#pragma omp teams #pragma omp teams
{ case 0:; } // { dg-error "jump" } { 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 branch to/from OpenMP structured block" "" { target *-*-* } 8 }
// { dg-error "invalid entry to OpenMP structured block" "" { target *-*-* } 10 } // { dg-error "invalid entry to OpenMP structured block" "" { target *-*-* } 10 }
// { dg-error "invalid branch to/from OpenMP structured block" "" { target *-*-* } 39 } // { dg-error "invalid branch to/from OpenMP structured block" "" { target *-*-* } 40 }
// { dg-error "invalid entry to OpenMP structured block" "" { target *-*-* } 41 } // { dg-error "invalid entry to OpenMP structured block" "" { target *-*-* } 42 }
...@@ -35,6 +35,7 @@ class MainWindow { ...@@ -35,6 +35,7 @@ class MainWindow {
void MainWindow::update_status(Result result) { void MainWindow::update_status(Result result) {
switch (result) { switch (result) {
status_frame.modify_bg(Gtk::STATE_NORMAL,Gdk::Color::Color("green")); // { dg-error "" } 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_frame.modify_bg(Gtk::STATE_NORMAL,Gdk::Color::Color("red")); // { dg-error "" }
status_label.set_text("Out of memory"); status_label.set_text("Out of memory");
} }
......
...@@ -14,7 +14,7 @@ void f() ...@@ -14,7 +14,7 @@ void f()
switch (i) switch (i)
{ {
synchronized { synchronized { // { dg-warning "statement will never be executed" }
++i; ++i;
case 42: // { dg-error "" } case 42: // { dg-error "" }
++i; ++i;
......
...@@ -8,7 +8,7 @@ main (void) ...@@ -8,7 +8,7 @@ main (void)
switch ((signed char) i) switch ((signed char) i)
{ {
case 255: /* { dg-bogus "exceeds maximum value" "" { xfail *-*-* } } */ case 255: /* { dg-bogus "exceeds maximum value" "" { xfail *-*-* } } */
abort (); abort (); /* { dg-warning "statement will never be executed" } */
default: default:
break; break;
} }
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-Wjump-misses-init" } */ /* { dg-options "-Wjump-misses-init -Wno-switch-unreachable" } */
int int
f1 (int a) f1 (int a)
{ {
......
/* 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;
}
}
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
void void
f (int a, int b) f (int a, int b)
{ {
switch (a) { switch (a) { /* { dg-warning "statement will never be executed" } */
int v[b]; int v[b];
case 2: /* { dg-error "switch jumps into scope of identifier with variably modified type" } */ 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" } */ default: /* { dg-error "switch jumps into scope of identifier with variably modified type" } */
......
...@@ -5,28 +5,28 @@ void foo(int i) ...@@ -5,28 +5,28 @@ void foo(int i)
int j; int j;
switch (i) // { dg-error "invalid entry to OpenMP structured block" } 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:; } { case 0:; }
} }
switch (i) // { dg-error "invalid entry to OpenMP structured block" } 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) for (j = 0; j < 10; ++ j)
{ case 1:; } { case 1:; }
} }
switch (i) // { dg-error "invalid entry to OpenMP structured block" } 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:; } { case 2:; }
} }
switch (i) // { dg-error "invalid entry to OpenMP structured block" } 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:; } { case 3:; }
} }
switch (i) // { dg-error "invalid entry to OpenMP structured block" } 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:; { case 4:;
#pragma omp section #pragma omp section
{ case 5:; } { case 5:; }
...@@ -34,7 +34,7 @@ void foo(int i) ...@@ -34,7 +34,7 @@ void foo(int i)
} }
switch (i) // { dg-error "invalid entry to OpenMP structured block" } switch (i) // { dg-error "invalid entry to OpenMP structured block" }
{ {
#pragma omp ordered #pragma omp ordered // { dg-warning "statement will never be executed" }
{ default:; } { default:; }
} }
} }
...@@ -5,7 +5,7 @@ void foo(int i) ...@@ -5,7 +5,7 @@ void foo(int i)
int j; int j;
switch (i) // { dg-error "invalid entry to OpenMP structured block" } 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:; } { case 0:; }
#pragma omp for #pragma omp for
for (j = 0; j < 10; ++ j) for (j = 0; j < 10; ++ j)
......
...@@ -23,7 +23,7 @@ foo (int x) ...@@ -23,7 +23,7 @@ foo (int x)
switch (x) // { dg-error "invalid entry to OpenMP structured block" } 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:; } { case 0:; }
} }
} }
...@@ -23,7 +23,7 @@ foo (int x, int y) ...@@ -23,7 +23,7 @@ foo (int x, int y)
switch (x) // { dg-error "invalid entry to OpenMP structured block" } 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:; } { case 0:; }
} }
} }
...@@ -23,7 +23,7 @@ foo (int x) ...@@ -23,7 +23,7 @@ foo (int x)
switch (x) // { dg-error "invalid entry to OpenMP structured block" } 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:; } { case 0:; }
} }
} }
...@@ -24,7 +24,7 @@ foo (int x) ...@@ -24,7 +24,7 @@ foo (int x)
switch (x) // { dg-error "invalid entry to OpenMP structured block" } switch (x) // { dg-error "invalid entry to OpenMP structured block" }
{ {
#pragma omp target teams #pragma omp target teams
{ case 0:; } { case 0:; } // { dg-warning "statement will never be executed" }
} }
} }
...@@ -54,7 +54,7 @@ bar (int x) ...@@ -54,7 +54,7 @@ bar (int x)
switch (x) // { dg-error "invalid entry to OpenMP structured block" } 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 #pragma omp teams
{ case 0:; } { case 0:; }
} }
......
/* Test for proper errors for break and continue in nested functions. */ /* Test for proper errors for break and continue in nested functions. */
/* Origin: Joseph Myers <jsm@polyomino.org.uk> */ /* Origin: Joseph Myers <jsm@polyomino.org.uk> */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "" } */ /* { dg-options "-Wno-switch-unreachable" } */
void void
foo (int a) foo (int a)
......
/* PR c/67784 */ /* PR c/67784 */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "" } */ /* { dg-options "-Wno-switch-unreachable" } */
typedef int T; typedef int T;
......
...@@ -11,7 +11,7 @@ foo1 (unsigned char i) ...@@ -11,7 +11,7 @@ foo1 (unsigned char i)
{ {
switch (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; return 1;
case 256: /* { dg-warning "case label value exceeds maximum value for type" } */ case 256: /* { dg-warning "case label value exceeds maximum value for type" } */
return 2; return 2;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment