re PR c/49859 (gcc could warn about statements between "switch" and first "case")
authorMarek Polacek <mpolacek@gcc.gnu.org>
Mon, 23 May 2016 15:37:09 +0000 (15:37 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Mon, 23 May 2016 15:37:09 +0000 (15:37 +0000)
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

29 files changed:
gcc/ChangeLog
gcc/common.opt
gcc/doc/invoke.texi
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/Wswitch-unreachable-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/goacc/sb-2.c
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C
gcc/testsuite/g++.dg/gomp/block-10.C
gcc/testsuite/g++.dg/gomp/block-9.C
gcc/testsuite/g++.dg/gomp/target-1.C
gcc/testsuite/g++.dg/gomp/target-2.C
gcc/testsuite/g++.dg/gomp/taskgroup-1.C
gcc/testsuite/g++.dg/gomp/teams-1.C
gcc/testsuite/g++.dg/overload/error3.C
gcc/testsuite/g++.dg/tm/jump1.C
gcc/testsuite/g++.dg/torture/pr40335.C
gcc/testsuite/gcc.dg/Wjump-misses-init-1.c
gcc/testsuite/gcc.dg/Wswitch-unreachable-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c99-vla-jump-5.c
gcc/testsuite/gcc.dg/gomp/block-10.c
gcc/testsuite/gcc.dg/gomp/block-9.c
gcc/testsuite/gcc.dg/gomp/target-1.c
gcc/testsuite/gcc.dg/gomp/target-2.c
gcc/testsuite/gcc.dg/gomp/taskgroup-1.c
gcc/testsuite/gcc.dg/gomp/teams-1.c
gcc/testsuite/gcc.dg/nested-func-1.c
gcc/testsuite/gcc.dg/pr67784-4.c
gcc/testsuite/gcc.dg/switch-warn-1.c

index 311e632fd656a7c4c93e476a414c0a31315d54b8..d838407bc0b4e3864360493e22b167541ed387ae 100644 (file)
@@ -1,4 +1,12 @@
-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
        TMR_INDEX is non-NULL.
index 682cb417e3d1883b62587941359880d7374f1f52..fccd4b5f9a54a038101d409b648c4e3c8bc12a0a 100644 (file)
@@ -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.
index f3d087f9cad4889c88115693416dffa3a97a2008..d2dfdd9914f951457749fc01d042780e83d08086 100644 (file)
@@ -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
index 4a544e3c8ee554c7e6d039b89ce81785e8880484..6473544251c9e5276754eb6b7c39b7ed354b994e 100644 (file)
@@ -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 <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;
       gimplify_ctxp->case_labels = saved_labels;
 
index 2cffaa1a85b6ada7d6de9851b46562491233c625..5a5c7b8515f6f9a19cd849ba94feaf32ee5c20f9 100644 (file)
@@ -1,3 +1,31 @@
+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>
 
        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 (file)
index 0000000..ee6ecc1
--- /dev/null
@@ -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;
+    }
+}
index a6760ec73f87643c15f25561022a59bb50c2aeaa..e986af3bb276961f71e203d6c19c1434812874e0 100644 (file)
@@ -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:; }
   }
 }
index 1cac211dd4c2674e1f3e14aa302ef27f9a069530..d71d3ade2ace5411f4ce49bef8c6dfc6d6e1af93 100644 (file)
@@ -20,7 +20,7 @@ main ()
            {
            case 3:             // { dg-error "case" }
              break;            // { dg-error "break" }
-           };
+           };                  // { dg-warning "statement will never be executed" }
        }
     }
 }
index b273c1f297c1d6354f3792323689ac6ab6583e39..4aa41cdf2e29a5007852c9ef261c618f861c31f6 100644 (file)
@@ -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" }
   }
 }
index 8012e5a7d46fca2ff1e74ba0b4712217717045a1..1de40a983f953f45c1f30b4448ed257d2c24650b 100644 (file)
@@ -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)
index bcdac61ee31b5b5c429ffba26f364a301d6f0d6e..97508739d8cc1594be973767698db40ab79adbd7 100644 (file)
@@ -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 }
   }
index 273f8d50fefa0766cf80857daea67ef004a8d08e..333b4d0f7fcb85de20481197d198c6b939e9c556 100644 (file)
@@ -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 }
   }
index e15d59d947a3622630afaa67df0bba2ca58e094e..5542a4e4fd2a898912b9c991ae3d781e7b1c4540 100644 (file)
@@ -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 }
   }
index 2b00bb614731ae160b47bace9e7a77fb5f52cb19..d0460c3c22c3ffa91b7af0a3c6f6650dde9e4116 100644 (file)
@@ -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 }
index e0003dd88131be682bbbdb87175af28fe6db5b4d..8391875150b53eb7991efefee962b25c6648ef36 100644 (file)
@@ -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");
     }
index 003eed034c919a387128d21b76f1113f831d7fbd..e28282dc624e9e7bf0ccaaaf2d6c58f9cbd0ea48 100644 (file)
@@ -14,7 +14,7 @@ void f()
 
   switch (i)
     {
-      synchronized {
+      synchronized {           // { dg-warning "statement will never be executed" }
        ++i;
       case 42:                 // { dg-error "" }
        ++i;
index 14ea95d40866edd968c52ae4b4206294699890ff..295a356d3fad6711cf98692add135f35a54de240 100644 (file)
@@ -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;
     }
index 86117f1f2f0d666ceac7723234615fbfad2ccecf..71809be59335b6605e739a2d45706228c94aa8ac 100644 (file)
@@ -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 (file)
index 0000000..2e5c99b
--- /dev/null
@@ -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;
+    }
+}
index fc5e04d1b9ea7877a6a69cabecab71454eb1ae37..5b5fc74f2e9dc9623ad3649ab7bd30c21abab770 100644 (file)
@@ -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" } */
index 69ae3c0cf6e6ac4c11f353dddec0c65d8862e33c..29c2d91431f7e2e823b224853bd666211ae836aa 100644 (file)
@@ -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:; }
   }
 }
index 2fae3deafd5678ba9752cb6d301f2494c5ca5ddc..202599f2ae2e030077c8c89b8ea87147b3022e2b 100644 (file)
@@ -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)
index aaa6a14577995bdc1969b18441dbde47d014814c..6bc5eb9493eb3a620d8e4f59d532480d533d88ef 100644 (file)
@@ -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:; }
   }
 }
index 3a7afc4892b0dee4020c962bfab9fc3544ac0104..c5c38d8b537be230e7396e6c35ff8e920e4b8bcb 100644 (file)
@@ -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:; }
   }
 }
index 1997e0c158d798ccaf8d28ea1eb805c65845aca3..f39b7ef725534b6433ebc2660826b1cb79b8b8c2 100644 (file)
@@ -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:; }
   }
 }
index ad5b100efc9a897f2972bc6e60f4dfb0ec6a59a3..a5370470cde6b754cd83077e9d6faf16d4cc3ea6 100644 (file)
@@ -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:; }
   }
index cb26e895e5c0d6e13c6febce90a86264fa2b002c..2052a6f40da55fbb64accaf0910cefe414072255 100644 (file)
@@ -1,7 +1,7 @@
 /* Test for proper errors for break and continue in nested functions.  */
 /* Origin: Joseph Myers <jsm@polyomino.org.uk> */
 /* { dg-do compile } */
-/* { dg-options "" } */
+/* { dg-options "-Wno-switch-unreachable" } */
 
 void
 foo (int a)
index 81a43fddd11e536cc9e10acbf2f64772e90ae94b..54620802a90303184f023dc59d1663b9e7e0afa4 100644 (file)
@@ -1,6 +1,6 @@
 /* PR c/67784 */
 /* { dg-do compile } */
-/* { dg-options "" } */
+/* { dg-options "-Wno-switch-unreachable" } */
 
 typedef int T;
 
index 04ca4e36765493dc3cf88699f18009e491669fc6..58fbd7d4860e2e37bb913f2c5aed6d1a4bf282bb 100644 (file)
@@ -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;